This is an automated email from the ASF dual-hosted git repository.

jt2594838 pushed a commit to branch dev/1.3
in repository https://gitbox.apache.org/repos/asf/iotdb.git


The following commit(s) were added to refs/heads/dev/1.3 by this push:
     new dfcd4899d7c [Performance] Pre-size collections with known cardinality 
(#18854)
dfcd4899d7c is described below

commit dfcd4899d7cb12fffba1a9b73553a7a42701e77a
Author: Caideyipi <[email protected]>
AuthorDate: Wed Oct 14 12:32:06 2026 +0800

    [Performance] Pre-size collections with known cardinality (#18854)
    
    Backport #18851 by re-scanning dev/1.3 for equivalent collection
    materialization paths and adapting capacity hints to this branch's
    schema, plan, Session, Pipe, memtable, and UDF implementations.
    
    (cherry picked from commit a78f5a736c7e34a951fa1dda34a314fc8a47b7c9)
---
 .../org/apache/iotdb/rpc/IoTDBJDBCDataSet.java     |  8 ++++----
 .../java/org/apache/iotdb/rpc/IoTDBRpcDataSet.java |  8 ++++----
 .../java/org/apache/iotdb/session/Session.java     | 12 ++++++------
 .../apache/iotdb/session/util/SessionUtils.java    |  2 +-
 .../consensus/request/write/auth/AuthorPlan.java   |  4 ++--
 .../request/write/model/UpdateModelInfoPlan.java   |  2 +-
 .../pipe/payload/PipeDeactivateTemplatePlan.java   |  4 ++--
 .../pipe/task/OperateMultiplePipesPlanV2.java      |  2 +-
 .../topic/AlterMultipleTopicsPlan.java             |  2 +-
 .../impl/schema/DeactivateTemplateProcedure.java   |  3 ++-
 .../impl/sync/AuthOperationProcedure.java          |  2 +-
 .../payload/FetchCombineResultRequest.java         |  2 +-
 .../db/queryengine/common/TimeseriesContext.java   |  4 +++-
 .../fragment/FragmentInstanceFailureInfo.java      |  4 ++--
 .../operator/process/FilterAndProjectOperator.java |  6 ++++--
 .../operator/process/TransformOperator.java        |  2 +-
 .../db/queryengine/plan/analyze/TemplatedInfo.java |  4 ++--
 .../db/queryengine/plan/analyze/TypeProvider.java  |  3 ++-
 .../plan/expression/multi/FunctionExpression.java  |  4 ++--
 .../visitor/ColumnTransformerVisitor.java          |  6 ++++--
 .../visitor/CompleteMeasurementSchemaVisitor.java  |  2 +-
 .../visitor/IntermediateLayerVisitor.java          |  3 ++-
 .../metedata/read/LevelTimeSeriesCountNode.java    |  4 ++--
 .../metedata/read/SeriesSchemaFetchScanNode.java   |  4 ++--
 .../node/metedata/read/TimeSeriesCountNode.java    |  4 ++--
 .../metedata/read/TimeSeriesSchemaScanNode.java    |  4 ++--
 .../write/CreateAlignedTimeSeriesNode.java         | 16 ++++++++--------
 .../metedata/write/CreateMultiTimeSeriesNode.java  |  3 ++-
 .../plan/node/metedata/write/MeasurementGroup.java | 14 +++++++-------
 .../metedata/write/view/AlterLogicalViewNode.java  |  5 +++--
 .../metedata/write/view/CreateLogicalViewNode.java |  5 +++--
 .../node/process/AggregationMergeSortNode.java     |  2 +-
 .../planner/plan/node/process/AggregationNode.java |  2 +-
 .../planner/plan/node/process/DeviceMergeNode.java |  2 +-
 .../planner/plan/node/process/DeviceViewNode.java  |  9 +++++----
 .../plan/node/process/GroupByLevelNode.java        |  3 ++-
 .../planner/plan/node/process/GroupByTagNode.java  |  7 ++++---
 .../planner/plan/node/process/MergeSortNode.java   |  2 +-
 .../planner/plan/node/process/ProjectNode.java     |  2 +-
 .../plan/node/process/RawDataAggregationNode.java  |  2 +-
 .../plan/node/process/SingleDeviceViewNode.java    |  2 +-
 .../node/process/SlidingWindowAggregationNode.java |  2 +-
 .../plan/planner/plan/node/process/TopKNode.java   |  2 +-
 .../planner/plan/node/process/TransformNode.java   |  2 +-
 .../planner/plan/node/sink/IdentitySinkNode.java   |  2 +-
 .../planner/plan/node/sink/ShuffleSinkNode.java    |  2 +-
 .../source/AlignedSeriesAggregationScanNode.java   |  3 ++-
 .../plan/node/source/AlignedSeriesScanNode.java    |  2 +-
 .../plan/node/source/DeviceRegionScanNode.java     |  3 ++-
 .../node/source/SeriesAggregationScanNode.java     |  3 ++-
 .../plan/node/source/TimeseriesRegionScanNode.java | 12 +++++++-----
 .../plan/node/write/InsertMultiTabletsNode.java    |  5 ++---
 .../planner/plan/node/write/InsertRowsNode.java    |  5 ++---
 .../parameter/model/ModelInferenceDescriptor.java  |  6 +++---
 .../dag/column/CaseWhenThenColumnTransformer.java  |  6 +++---
 .../visitor/SchemaRegionPlanDeserializer.java      | 22 ++++++++++++----------
 .../dataregion/memtable/AbstractMemTable.java      | 18 ++++++++++++++----
 .../memtable/AlignedWritableMemChunk.java          |  2 +-
 .../dataregion/memtable/WritableMemChunk.java      |  2 +-
 .../tsfile/timeindex/DeviceTimeIndex.java          |  4 ++--
 .../load/splitter/AlignedChunkData.java            |  4 ++--
 .../strategy/RandomOnDiskUsableSpaceStrategy.java  |  2 +-
 .../apache/iotdb/db/utils/sort/DiskSpiller.java    |  4 ++--
 .../org/apache/iotdb/commons/auth/entity/Role.java |  6 ++++--
 .../org/apache/iotdb/commons/auth/entity/User.java |  7 ++++---
 .../commons/auth/user/LocalFileUserAccessor.java   |  2 +-
 .../consensus/index/impl/StateProgressIndex.java   |  5 +++--
 .../iotdb/commons/model/ModelHyperparameter.java   |  2 +-
 .../org/apache/iotdb/commons/path/AlignedPath.java |  4 ++--
 .../org/apache/iotdb/commons/path/PartialPath.java |  2 +-
 .../apache/iotdb/commons/path/PathPatternNode.java |  3 ++-
 .../PipeConsensusTransferFileSealWithModReq.java   | 10 +++++-----
 .../thrift/request/PipeTransferFileSealReqV2.java  |  8 ++++----
 .../thrift/request/PipeTransferHandshakeV2Req.java |  4 ++--
 .../multi/FunctionViewExpression.java              |  4 ++--
 .../org/apache/iotdb/commons/utils/AuthUtils.java  |  2 +-
 .../commons/utils/BasicStructureSerDeUtil.java     | 15 ++++++++-------
 .../org/apache/iotdb/commons/utils/IOUtils.java    |  2 +-
 .../apache/iotdb/library/dprofile/UDTFSegment.java |  2 +-
 .../iotdb/library/match/PatternExecutor.java       |  4 ++--
 80 files changed, 206 insertions(+), 170 deletions(-)

diff --git 
a/iotdb-client/service-rpc/src/main/java/org/apache/iotdb/rpc/IoTDBJDBCDataSet.java
 
b/iotdb-client/service-rpc/src/main/java/org/apache/iotdb/rpc/IoTDBJDBCDataSet.java
index 254c6d68598..5aff6cb1d63 100644
--- 
a/iotdb-client/service-rpc/src/main/java/org/apache/iotdb/rpc/IoTDBJDBCDataSet.java
+++ 
b/iotdb-client/service-rpc/src/main/java/org/apache/iotdb/rpc/IoTDBJDBCDataSet.java
@@ -113,8 +113,8 @@ public class IoTDBJDBCDataSet {
     this.zoneId = zoneId;
     columnSize = columnNameList.size();
 
-    this.columnNameList = new ArrayList<>();
-    this.columnTypeList = new ArrayList<>();
+    this.columnNameList = new ArrayList<>(columnSize + (ignoreTimeStamp ? 0 : 
1));
+    this.columnTypeList = new ArrayList<>(columnSize + (ignoreTimeStamp ? 0 : 
1));
     if (!ignoreTimeStamp) {
       this.columnNameList.add(TIMESTAMP_STR);
       this.columnTypeList.add(String.valueOf(TSDataType.INT64));
@@ -222,8 +222,8 @@ public class IoTDBJDBCDataSet {
     this.zoneId = zoneId;
     columnSize = columnNameList.size();
 
-    this.columnNameList = new ArrayList<>();
-    this.columnTypeList = new ArrayList<>();
+    this.columnNameList = new ArrayList<>(columnSize + (ignoreTimeStamp ? 0 : 
1));
+    this.columnTypeList = new ArrayList<>(columnSize + (ignoreTimeStamp ? 0 : 
1));
     if (!ignoreTimeStamp) {
       this.columnNameList.add(TIMESTAMP_STR);
       this.columnTypeList.add(String.valueOf(TSDataType.INT64));
diff --git 
a/iotdb-client/service-rpc/src/main/java/org/apache/iotdb/rpc/IoTDBRpcDataSet.java
 
b/iotdb-client/service-rpc/src/main/java/org/apache/iotdb/rpc/IoTDBRpcDataSet.java
index 2ff01502fb3..615105ae474 100644
--- 
a/iotdb-client/service-rpc/src/main/java/org/apache/iotdb/rpc/IoTDBRpcDataSet.java
+++ 
b/iotdb-client/service-rpc/src/main/java/org/apache/iotdb/rpc/IoTDBRpcDataSet.java
@@ -111,8 +111,8 @@ public class IoTDBRpcDataSet {
     this.moreData = moreData;
     columnSize = columnNameList.size();
 
-    this.columnNameList = new ArrayList<>();
-    this.columnTypeList = new ArrayList<>();
+    this.columnNameList = new ArrayList<>(columnSize + (ignoreTimeStamp ? 0 : 
1));
+    this.columnTypeList = new ArrayList<>(columnSize + (ignoreTimeStamp ? 0 : 
1));
     if (!ignoreTimeStamp) {
       this.columnNameList.add(TIMESTAMP_STR);
       this.columnTypeList.add(String.valueOf(TSDataType.INT64));
@@ -205,8 +205,8 @@ public class IoTDBRpcDataSet {
     this.moreData = moreData;
     columnSize = columnNameList.size();
 
-    this.columnNameList = new ArrayList<>();
-    this.columnTypeList = new ArrayList<>();
+    this.columnNameList = new ArrayList<>(columnSize + (ignoreTimeStamp ? 0 : 
1));
+    this.columnTypeList = new ArrayList<>(columnSize + (ignoreTimeStamp ? 0 : 
1));
     if (!ignoreTimeStamp) {
       this.columnNameList.add(TIMESTAMP_STR);
       this.columnTypeList.add(String.valueOf(TSDataType.INT64));
diff --git 
a/iotdb-client/session/src/main/java/org/apache/iotdb/session/Session.java 
b/iotdb-client/session/src/main/java/org/apache/iotdb/session/Session.java
index c8d26f0cefe..f5901e93624 100644
--- a/iotdb-client/session/src/main/java/org/apache/iotdb/session/Session.java
+++ b/iotdb-client/session/src/main/java/org/apache/iotdb/session/Session.java
@@ -2531,7 +2531,7 @@ public class Session implements ISession {
       List<List<TSDataType>> typesList,
       List<List<String>> measurementsList)
       throws IoTDBConnectionException {
-    List<ByteBuffer> buffersList = new ArrayList<>();
+    List<ByteBuffer> buffersList = new ArrayList<>(valuesList.size());
     for (int i = 0; i < valuesList.size(); i++) {
       ByteBuffer buffer =
           SessionUtils.getValueBuffer(typesList.get(i), valuesList.get(i), 
measurementsList.get(i));
@@ -2870,8 +2870,8 @@ public class Session implements ISession {
       sortTablet(tablet);
     }
     request.addToPrefixPaths(tablet.deviceId);
-    List<String> measurements = new ArrayList<>();
-    List<Integer> dataTypes = new ArrayList<>();
+    List<String> measurements = new ArrayList<>(tablet.getSchemas().size());
+    List<Integer> dataTypes = new ArrayList<>(tablet.getSchemas().size());
     request.setIsAligned(isAligned);
     for (IMeasurementSchema measurementSchema : tablet.getSchemas()) {
       if (measurementSchema.getMeasurementId() == null) {
@@ -3530,9 +3530,9 @@ public class Session implements ISession {
       List<List<TSEncoding>> encodings,
       List<CompressionType> compressors)
       throws IoTDBConnectionException, StatementExecutionException {
-    List<String> flatMeasurements = new ArrayList<>();
-    List<TSDataType> flatDataTypes = new ArrayList<>();
-    List<TSEncoding> flatEncodings = new ArrayList<>();
+    List<String> flatMeasurements = new ArrayList<>(measurements.size());
+    List<TSDataType> flatDataTypes = new ArrayList<>(measurements.size());
+    List<TSEncoding> flatEncodings = new ArrayList<>(measurements.size());
     for (int idx = 0; idx < measurements.size(); idx++) {
       flatMeasurements.add(measurements.get(idx).get(0));
       flatDataTypes.add(dataTypes.get(idx).get(0));
diff --git 
a/iotdb-client/session/src/main/java/org/apache/iotdb/session/util/SessionUtils.java
 
b/iotdb-client/session/src/main/java/org/apache/iotdb/session/util/SessionUtils.java
index 31ca44aa3ff..57a50c49847 100644
--- 
a/iotdb-client/session/src/main/java/org/apache/iotdb/session/util/SessionUtils.java
+++ 
b/iotdb-client/session/src/main/java/org/apache/iotdb/session/util/SessionUtils.java
@@ -330,7 +330,7 @@ public class SessionUtils {
     if (nodeUrls == null) {
       throw new NumberFormatException("nodeUrls is null");
     }
-    List<TEndPoint> endPointsList = new ArrayList<>();
+    List<TEndPoint> endPointsList = new ArrayList<>(nodeUrls.size());
     for (String nodeUrl : nodeUrls) {
       TEndPoint endPoint = UrlUtils.parseTEndPointIpv4AndIpv6Url(nodeUrl);
       endPointsList.add(endPoint);
diff --git 
a/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/consensus/request/write/auth/AuthorPlan.java
 
b/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/consensus/request/write/auth/AuthorPlan.java
index 8711cd86587..7e7f561b814 100644
--- 
a/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/consensus/request/write/auth/AuthorPlan.java
+++ 
b/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/consensus/request/write/auth/AuthorPlan.java
@@ -26,6 +26,7 @@ import org.apache.iotdb.commons.utils.BasicStructureSerDeUtil;
 import org.apache.iotdb.confignode.consensus.request.ConfigPhysicalPlan;
 import org.apache.iotdb.confignode.consensus.request.ConfigPhysicalPlanType;
 
+import com.google.common.collect.Sets;
 import org.apache.tsfile.utils.ReadWriteIOUtils;
 import org.slf4j.Logger;
 
@@ -33,7 +34,6 @@ import java.io.DataOutputStream;
 import java.io.IOException;
 import java.nio.ByteBuffer;
 import java.util.ArrayList;
-import java.util.HashSet;
 import java.util.List;
 import java.util.Objects;
 import java.util.Set;
@@ -181,7 +181,7 @@ public class AuthorPlan extends ConfigPhysicalPlan {
       this.permissions = null;
     } else {
       final int permissionsSize = buffer.getInt();
-      this.permissions = new HashSet<>();
+      this.permissions = Sets.newHashSetWithExpectedSize(permissionsSize);
       for (int i = 0; i < permissionsSize; i++) {
         permissions.add(buffer.getInt());
       }
diff --git 
a/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/consensus/request/write/model/UpdateModelInfoPlan.java
 
b/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/consensus/request/write/model/UpdateModelInfoPlan.java
index ca74d2daf69..168f64d4309 100644
--- 
a/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/consensus/request/write/model/UpdateModelInfoPlan.java
+++ 
b/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/consensus/request/write/model/UpdateModelInfoPlan.java
@@ -88,7 +88,7 @@ public class UpdateModelInfoPlan extends ConfigPhysicalPlan {
     this.modelName = ReadWriteIOUtils.readString(buffer);
     this.modelInformation = ModelInformation.deserialize(buffer);
     int size = ReadWriteIOUtils.readInt(buffer);
-    this.nodeIds = new ArrayList<>();
+    this.nodeIds = new ArrayList<>(size);
     for (int i = 0; i < size; i++) {
       this.nodeIds.add(ReadWriteIOUtils.readInt(buffer));
     }
diff --git 
a/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/consensus/request/write/pipe/payload/PipeDeactivateTemplatePlan.java
 
b/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/consensus/request/write/pipe/payload/PipeDeactivateTemplatePlan.java
index cf9afa0fd8c..22eb6af6848 100644
--- 
a/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/consensus/request/write/pipe/payload/PipeDeactivateTemplatePlan.java
+++ 
b/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/consensus/request/write/pipe/payload/PipeDeactivateTemplatePlan.java
@@ -25,13 +25,13 @@ import 
org.apache.iotdb.confignode.consensus.request.ConfigPhysicalPlan;
 import org.apache.iotdb.confignode.consensus.request.ConfigPhysicalPlanType;
 import org.apache.iotdb.db.schemaengine.template.Template;
 
+import com.google.common.collect.Maps;
 import org.apache.tsfile.utils.ReadWriteIOUtils;
 
 import java.io.DataOutputStream;
 import java.io.IOException;
 import java.nio.ByteBuffer;
 import java.util.ArrayList;
-import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
 import java.util.Objects;
@@ -69,7 +69,7 @@ public class PipeDeactivateTemplatePlan extends 
ConfigPhysicalPlan {
   @Override
   protected void deserializeImpl(ByteBuffer buffer) throws IOException {
     int size = ReadWriteIOUtils.readInt(buffer);
-    templateSetInfo = new HashMap<>();
+    templateSetInfo = Maps.newHashMapWithExpectedSize(size);
     for (int i = 0; i < size; i++) {
       PartialPath pattern = (PartialPath) 
PathDeserializeUtil.deserialize(buffer);
       int templateNum = ReadWriteIOUtils.readInt(buffer);
diff --git 
a/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/consensus/request/write/pipe/task/OperateMultiplePipesPlanV2.java
 
b/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/consensus/request/write/pipe/task/OperateMultiplePipesPlanV2.java
index c9ff9f57448..5ea97c1c840 100644
--- 
a/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/consensus/request/write/pipe/task/OperateMultiplePipesPlanV2.java
+++ 
b/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/consensus/request/write/pipe/task/OperateMultiplePipesPlanV2.java
@@ -75,8 +75,8 @@ public class OperateMultiplePipesPlanV2 extends 
ConfigPhysicalPlan {
   @Override
   protected void deserializeImpl(ByteBuffer buffer) throws IOException {
     if (ReadWriteIOUtils.readBool(buffer)) {
-      subPlans = new ArrayList<>();
       int size = ReadWriteIOUtils.readInt(buffer);
+      subPlans = new ArrayList<>(size);
       for (int i = 0; i < size; i++) {
         short type = ReadWriteIOUtils.readShort(buffer);
         if (type == ConfigPhysicalPlanType.CreatePipeV2.getPlanType()) {
diff --git 
a/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/consensus/request/write/subscription/topic/AlterMultipleTopicsPlan.java
 
b/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/consensus/request/write/subscription/topic/AlterMultipleTopicsPlan.java
index d3dd66439f6..62e674b43d1 100644
--- 
a/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/consensus/request/write/subscription/topic/AlterMultipleTopicsPlan.java
+++ 
b/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/consensus/request/write/subscription/topic/AlterMultipleTopicsPlan.java
@@ -65,8 +65,8 @@ public class AlterMultipleTopicsPlan extends 
ConfigPhysicalPlan {
   @Override
   protected void deserializeImpl(ByteBuffer buffer) throws IOException {
     if (ReadWriteIOUtils.readBool(buffer)) {
-      subPlans = new ArrayList<>();
       int size = ReadWriteIOUtils.readInt(buffer);
+      subPlans = new ArrayList<>(size);
       for (int i = 0; i < size; i++) {
         // This will read the type of the plan (AlterTopicPlan), which will be 
ignored
         ReadWriteIOUtils.readShort(buffer);
diff --git 
a/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/procedure/impl/schema/DeactivateTemplateProcedure.java
 
b/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/procedure/impl/schema/DeactivateTemplateProcedure.java
index fffb0fbca18..8cecbacd399 100644
--- 
a/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/procedure/impl/schema/DeactivateTemplateProcedure.java
+++ 
b/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/procedure/impl/schema/DeactivateTemplateProcedure.java
@@ -48,6 +48,7 @@ import 
org.apache.iotdb.mpp.rpc.thrift.TRollbackSchemaBlackListWithTemplateReq;
 import org.apache.iotdb.pipe.api.exception.PipeException;
 import org.apache.iotdb.rpc.TSStatusCode;
 
+import com.google.common.collect.Maps;
 import org.apache.tsfile.utils.ReadWriteIOUtils;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -378,7 +379,7 @@ public class DeactivateTemplateProcedure
     super.deserialize(byteBuffer);
     queryId = ReadWriteIOUtils.readString(byteBuffer);
     int size = ReadWriteIOUtils.readInt(byteBuffer);
-    Map<PartialPath, List<Template>> templateSetInfo = new HashMap<>();
+    Map<PartialPath, List<Template>> templateSetInfo = 
Maps.newHashMapWithExpectedSize(size);
     for (int i = 0; i < size; i++) {
       PartialPath pattern = (PartialPath) 
PathDeserializeUtil.deserialize(byteBuffer);
       int templateNum = ReadWriteIOUtils.readInt(byteBuffer);
diff --git 
a/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/procedure/impl/sync/AuthOperationProcedure.java
 
b/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/procedure/impl/sync/AuthOperationProcedure.java
index b643e6de23b..22c8741966b 100644
--- 
a/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/procedure/impl/sync/AuthOperationProcedure.java
+++ 
b/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/procedure/impl/sync/AuthOperationProcedure.java
@@ -213,7 +213,7 @@ public class AuthOperationProcedure extends 
AbstractNodeProcedure<AuthOperationP
   public void deserialize(ByteBuffer byteBuffer) {
     super.deserialize(byteBuffer);
     int size = ReadWriteIOUtils.readInt(byteBuffer);
-    this.datanodes = new ArrayList<>();
+    this.datanodes = new ArrayList<>(size);
     for (int i = 0; i < size; i++) {
       TDataNodeConfiguration datanode =
           
ThriftCommonsSerDeUtils.deserializeTDataNodeConfiguration(byteBuffer);
diff --git 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/pipe/processor/twostage/exchange/payload/FetchCombineResultRequest.java
 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/pipe/processor/twostage/exchange/payload/FetchCombineResultRequest.java
index 03f8721f17b..97d6c4503e6 100644
--- 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/pipe/processor/twostage/exchange/payload/FetchCombineResultRequest.java
+++ 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/pipe/processor/twostage/exchange/payload/FetchCombineResultRequest.java
@@ -91,8 +91,8 @@ public class FetchCombineResultRequest extends 
TPipeTransferReq {
   private FetchCombineResultRequest 
translateFromTPipeTransferReq(TPipeTransferReq transferReq) {
     pipeName = ReadWriteIOUtils.readString(transferReq.body);
     creationTime = ReadWriteIOUtils.readLong(transferReq.body);
-    combineIdList = new ArrayList<>();
     final int combineIdListSize = ReadWriteIOUtils.readInt(transferReq.body);
+    combineIdList = new ArrayList<>(combineIdListSize);
     for (int i = 0; i < combineIdListSize; i++) {
       combineIdList.add(ReadWriteIOUtils.readString(transferReq.body));
     }
diff --git 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/common/TimeseriesContext.java
 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/common/TimeseriesContext.java
index ecad26bac00..143cdacb798 100644
--- 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/common/TimeseriesContext.java
+++ 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/common/TimeseriesContext.java
@@ -22,6 +22,7 @@ package org.apache.iotdb.db.queryengine.common;
 import 
org.apache.iotdb.db.queryengine.common.schematree.IMeasurementSchemaInfo;
 import org.apache.iotdb.db.schemaengine.schemaregion.utils.MetaUtils;
 
+import com.google.common.collect.Maps;
 import org.apache.tsfile.utils.Pair;
 import org.apache.tsfile.utils.ReadWriteIOUtils;
 
@@ -389,7 +390,8 @@ public class TimeseriesContext {
     int activeCountMultiplier = ReadWriteIOUtils.readInt(buffer);
     boolean logicalView = ReadWriteIOUtils.readBool(buffer);
     int activeLogicalViewContextMapSize = ReadWriteIOUtils.readInt(buffer);
-    Map<String, TimeseriesContext> activeLogicalViewContextMap = new 
HashMap<>();
+    Map<String, TimeseriesContext> activeLogicalViewContextMap =
+        Maps.newHashMapWithExpectedSize(activeLogicalViewContextMapSize);
     for (int i = 0; i < activeLogicalViewContextMapSize; i++) {
       activeLogicalViewContextMap.put(
           ReadWriteIOUtils.readString(buffer), 
TimeseriesContext.deserialize(buffer));
diff --git 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/execution/fragment/FragmentInstanceFailureInfo.java
 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/execution/fragment/FragmentInstanceFailureInfo.java
index dfaf4aa1b48..1f18a6543a7 100644
--- 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/execution/fragment/FragmentInstanceFailureInfo.java
+++ 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/execution/fragment/FragmentInstanceFailureInfo.java
@@ -164,8 +164,6 @@ public class FragmentInstanceFailureInfo implements 
Serializable {
   public static FragmentInstanceFailureInfo deserialize(ByteBuffer byteBuffer) 
{
     final String message = ReadWriteIOUtils.readString(byteBuffer);
     FragmentInstanceFailureInfo cause;
-    List<FragmentInstanceFailureInfo> suppressed = new ArrayList<>();
-    List<String> stack = new ArrayList<>();
     int flag = ReadWriteIOUtils.readInt(byteBuffer);
     if (flag == 0) {
       cause = null;
@@ -173,10 +171,12 @@ public class FragmentInstanceFailureInfo implements 
Serializable {
       cause = deserialize(byteBuffer);
     }
     int suppressedSize = ReadWriteIOUtils.readInt(byteBuffer);
+    List<FragmentInstanceFailureInfo> suppressed = new 
ArrayList<>(suppressedSize);
     for (int i = 0; i < suppressedSize; i++) {
       suppressed.add(deserialize(byteBuffer));
     }
     int stackSize = ReadWriteIOUtils.readInt(byteBuffer);
+    List<String> stack = new ArrayList<>(stackSize);
     for (int i = 0; i < stackSize; i++) {
       stack.add(ReadWriteIOUtils.readString(byteBuffer));
     }
diff --git 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/execution/operator/process/FilterAndProjectOperator.java
 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/execution/operator/process/FilterAndProjectOperator.java
index 73f77e826e7..a14937c6286 100644
--- 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/execution/operator/process/FilterAndProjectOperator.java
+++ 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/execution/operator/process/FilterAndProjectOperator.java
@@ -148,7 +148,9 @@ public class FilterAndProjectOperator implements 
ProcessOperator {
     final TimeColumnBuilder timeBuilder = 
filterTsBlockBuilder.getTimeColumnBuilder();
     final ColumnBuilder[] columnBuilders = 
filterTsBlockBuilder.getValueColumnBuilders();
 
-    List<Column> resultColumns = new ArrayList<>();
+    List<Column> resultColumns =
+        new ArrayList<>(
+            input.getValueColumnCount() + (hasNonMappableUDF ? 0 : 
commonTransformerList.size()));
     for (int i = 0, n = input.getValueColumnCount(); i < n; i++) {
       resultColumns.add(input.getColumn(i));
     }
@@ -213,7 +215,7 @@ public class FilterAndProjectOperator implements 
ProcessOperator {
       leafColumnTransformer.initFromTsBlock(input);
     }
 
-    List<Column> resultColumns = new ArrayList<>();
+    List<Column> resultColumns = new 
ArrayList<>(projectOutputTransformerList.size());
     for (ColumnTransformer columnTransformer : projectOutputTransformerList) {
       columnTransformer.tryEvaluate();
       resultColumns.add(columnTransformer.getColumn());
diff --git 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/execution/operator/process/TransformOperator.java
 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/execution/operator/process/TransformOperator.java
index e5ae29f0c4a..d10135259d2 100644
--- 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/execution/operator/process/TransformOperator.java
+++ 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/execution/operator/process/TransformOperator.java
@@ -289,7 +289,7 @@ public class TransformOperator implements ProcessOperator {
 
   protected void prepareTsBlockBuilder(TsBlockBuilder tsBlockBuilder) {
     if (outputDataTypes == null) {
-      outputDataTypes = new ArrayList<>();
+      outputDataTypes = new ArrayList<>(transformers.length);
       for (LayerReader reader : transformers) {
         outputDataTypes.add(reader.getDataTypes()[0]);
       }
diff --git 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/analyze/TemplatedInfo.java
 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/analyze/TemplatedInfo.java
index 8241bf11005..07808fe8c8b 100644
--- 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/analyze/TemplatedInfo.java
+++ 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/analyze/TemplatedInfo.java
@@ -390,14 +390,14 @@ public class TemplatedInfo {
   public static TemplatedInfo deserialize(ByteBuffer byteBuffer) {
 
     int measurementSize = ReadWriteIOUtils.readInt(byteBuffer);
-    List<String> measurementList = new ArrayList<>();
+    List<String> measurementList = new ArrayList<>(measurementSize);
     int cnt = measurementSize;
     while (cnt-- > 0) {
       measurementList.add(ReadWriteIOUtils.readString(byteBuffer));
     }
 
     cnt = measurementSize;
-    List<IMeasurementSchema> measurementSchemaList = new ArrayList<>();
+    List<IMeasurementSchema> measurementSchemaList = new 
ArrayList<>(measurementSize);
     while (cnt-- > 0) {
       // MeasurementSchema is ok?
       measurementSchemaList.add(MeasurementSchema.deserializeFrom(byteBuffer));
diff --git 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/analyze/TypeProvider.java
 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/analyze/TypeProvider.java
index ef26583119e..0b12a95a247 100644
--- 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/analyze/TypeProvider.java
+++ 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/analyze/TypeProvider.java
@@ -19,6 +19,7 @@
 
 package org.apache.iotdb.db.queryengine.plan.analyze;
 
+import com.google.common.collect.Maps;
 import org.apache.tsfile.enums.TSDataType;
 import org.apache.tsfile.utils.ReadWriteIOUtils;
 import org.apache.tsfile.write.schema.IMeasurementSchema;
@@ -109,7 +110,7 @@ public class TypeProvider {
 
   public static TypeProvider deserialize(ByteBuffer byteBuffer) {
     int mapSize = ReadWriteIOUtils.readInt(byteBuffer);
-    Map<String, TSDataType> typeMap = new HashMap<>();
+    Map<String, TSDataType> typeMap = Maps.newHashMapWithExpectedSize(mapSize);
     while (mapSize > 0) {
       typeMap.put(
           ReadWriteIOUtils.readString(byteBuffer),
diff --git 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/expression/multi/FunctionExpression.java
 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/expression/multi/FunctionExpression.java
index 27ff875efd0..5e8c0917e75 100644
--- 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/expression/multi/FunctionExpression.java
+++ 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/expression/multi/FunctionExpression.java
@@ -109,7 +109,7 @@ public class FunctionExpression extends Expression {
     functionAttributes = ReadWriteIOUtils.readLinkedHashMap(byteBuffer);
 
     int expressionSize = ReadWriteIOUtils.readInt(byteBuffer);
-    expressions = new ArrayList<>();
+    expressions = new ArrayList<>(expressionSize);
     for (int i = 0; i < expressionSize; i++) {
       expressions.add(Expression.deserialize(byteBuffer));
     }
@@ -304,7 +304,7 @@ public class FunctionExpression extends Expression {
 
   public List<PartialPath> getPaths() {
     if (paths == null) {
-      paths = new ArrayList<>();
+      paths = new ArrayList<>(expressions.size());
       for (Expression expression : expressions) {
         paths.add(
             expression instanceof TimeSeriesOperand
diff --git 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/expression/visitor/ColumnTransformerVisitor.java
 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/expression/visitor/ColumnTransformerVisitor.java
index 6c871be905f..560c13dbc34 100644
--- 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/expression/visitor/ColumnTransformerVisitor.java
+++ 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/expression/visitor/ColumnTransformerVisitor.java
@@ -379,8 +379,10 @@ public class ColumnTransformerVisitor
         context.inputDataTypes.add(context.getType(caseWhenThenExpression));
         context.cache.put(caseWhenThenExpression, identity);
       } else {
-        List<ColumnTransformer> whenList = new ArrayList<>();
-        List<ColumnTransformer> thenList = new ArrayList<>();
+        List<ColumnTransformer> whenList =
+            new 
ArrayList<>(caseWhenThenExpression.getWhenThenExpressions().size());
+        List<ColumnTransformer> thenList =
+            new 
ArrayList<>(caseWhenThenExpression.getWhenThenExpressions().size());
         for (WhenThenExpression whenThenExpression :
             caseWhenThenExpression.getWhenThenExpressions()) {
           whenList.add(this.process(whenThenExpression.getWhen(), context));
diff --git 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/expression/visitor/CompleteMeasurementSchemaVisitor.java
 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/expression/visitor/CompleteMeasurementSchemaVisitor.java
index f8bb7b8dbe7..c1e0555b33c 100644
--- 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/expression/visitor/CompleteMeasurementSchemaVisitor.java
+++ 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/expression/visitor/CompleteMeasurementSchemaVisitor.java
@@ -78,7 +78,7 @@ public class CompleteMeasurementSchemaVisitor extends 
ExpressionVisitor<Expressi
   public Expression visitFunctionExpression(
       FunctionExpression functionExpression, ISchemaTree schemaTree) {
     List<Expression> children = functionExpression.getExpressions();
-    List<Expression> replacedChildren = new ArrayList<>();
+    List<Expression> replacedChildren = new ArrayList<>(children.size());
     for (Expression child : children) {
       replacedChildren.add(this.process(child, schemaTree));
     }
diff --git 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/expression/visitor/IntermediateLayerVisitor.java
 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/expression/visitor/IntermediateLayerVisitor.java
index ff96ab0020d..92f351e25a4 100644
--- 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/expression/visitor/IntermediateLayerVisitor.java
+++ 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/expression/visitor/IntermediateLayerVisitor.java
@@ -413,7 +413,8 @@ public class IntermediateLayerVisitor
 
   private IntermediateLayer constructUdfInputIntermediateLayer(
       FunctionExpression functionExpression, IntermediateLayerVisitorContext 
context) {
-    List<IntermediateLayer> intermediateLayers = new ArrayList<>();
+    List<IntermediateLayer> intermediateLayers =
+        new ArrayList<>(functionExpression.getExpressions().size());
     for (Expression expression : functionExpression.getExpressions()) {
       intermediateLayers.add(this.process(expression, context));
     }
diff --git 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/planner/plan/node/metedata/read/LevelTimeSeriesCountNode.java
 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/planner/plan/node/metedata/read/LevelTimeSeriesCountNode.java
index fc964afc029..21a3076c2ba 100644
--- 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/planner/plan/node/metedata/read/LevelTimeSeriesCountNode.java
+++ 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/planner/plan/node/metedata/read/LevelTimeSeriesCountNode.java
@@ -30,6 +30,7 @@ import 
org.apache.iotdb.db.queryengine.plan.planner.plan.node.PlanNodeId;
 import org.apache.iotdb.db.queryengine.plan.planner.plan.node.PlanNodeType;
 import org.apache.iotdb.db.schemaengine.template.Template;
 
+import com.google.common.collect.Maps;
 import org.apache.tsfile.utils.ReadWriteIOUtils;
 
 import jakarta.validation.constraints.NotNull;
@@ -37,7 +38,6 @@ import jakarta.validation.constraints.NotNull;
 import java.io.DataOutputStream;
 import java.io.IOException;
 import java.nio.ByteBuffer;
-import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
 import java.util.Objects;
@@ -150,7 +150,7 @@ public class LevelTimeSeriesCountNode extends 
SchemaQueryScanNode {
     SchemaFilter schemaFilter = SchemaFilter.deserialize(buffer);
     boolean includeSystemDatabase = ReadWriteIOUtils.readBool(buffer);
     int templateNum = ReadWriteIOUtils.readInt(buffer);
-    Map<Integer, Template> templateMap = new HashMap<>();
+    Map<Integer, Template> templateMap = 
Maps.newHashMapWithExpectedSize(templateNum);
     Template template;
     for (int i = 0; i < templateNum; i++) {
       template = new Template();
diff --git 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/planner/plan/node/metedata/read/SeriesSchemaFetchScanNode.java
 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/planner/plan/node/metedata/read/SeriesSchemaFetchScanNode.java
index f24cbbd9596..e6a3e926650 100644
--- 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/planner/plan/node/metedata/read/SeriesSchemaFetchScanNode.java
+++ 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/planner/plan/node/metedata/read/SeriesSchemaFetchScanNode.java
@@ -29,12 +29,12 @@ import 
org.apache.iotdb.db.queryengine.plan.planner.plan.node.PlanNodeUtil;
 import org.apache.iotdb.db.queryengine.plan.planner.plan.node.PlanVisitor;
 import org.apache.iotdb.db.schemaengine.template.Template;
 
+import com.google.common.collect.Maps;
 import org.apache.tsfile.utils.ReadWriteIOUtils;
 
 import java.io.DataOutputStream;
 import java.io.IOException;
 import java.nio.ByteBuffer;
-import java.util.HashMap;
 import java.util.Map;
 
 /** This class defines the scan task of schema fetcher. */
@@ -130,7 +130,7 @@ public class SeriesSchemaFetchScanNode extends 
SchemaFetchScanNode {
     PathPatternTree patternTree = PathPatternTree.deserialize(byteBuffer);
 
     int templateNum = ReadWriteIOUtils.readInt(byteBuffer);
-    Map<Integer, Template> templateMap = new HashMap<>();
+    Map<Integer, Template> templateMap = 
Maps.newHashMapWithExpectedSize(templateNum);
     Template template;
     for (int i = 0; i < templateNum; i++) {
       template = new Template();
diff --git 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/planner/plan/node/metedata/read/TimeSeriesCountNode.java
 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/planner/plan/node/metedata/read/TimeSeriesCountNode.java
index e6ad4b02572..b9fe8e7922b 100644
--- 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/planner/plan/node/metedata/read/TimeSeriesCountNode.java
+++ 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/planner/plan/node/metedata/read/TimeSeriesCountNode.java
@@ -30,6 +30,7 @@ import 
org.apache.iotdb.db.queryengine.plan.planner.plan.node.PlanNodeId;
 import org.apache.iotdb.db.queryengine.plan.planner.plan.node.PlanNodeType;
 import org.apache.iotdb.db.schemaengine.template.Template;
 
+import com.google.common.collect.Maps;
 import org.apache.tsfile.utils.ReadWriteIOUtils;
 
 import jakarta.validation.constraints.NotNull;
@@ -37,7 +38,6 @@ import jakarta.validation.constraints.NotNull;
 import java.io.DataOutputStream;
 import java.io.IOException;
 import java.nio.ByteBuffer;
-import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
 import java.util.Objects;
@@ -143,7 +143,7 @@ public class TimeSeriesCountNode extends 
SchemaQueryScanNode {
     boolean includeSystemDatabase = ReadWriteIOUtils.readBool(buffer);
 
     int templateNum = ReadWriteIOUtils.readInt(buffer);
-    Map<Integer, Template> templateMap = new HashMap<>();
+    Map<Integer, Template> templateMap = 
Maps.newHashMapWithExpectedSize(templateNum);
     Template template;
     for (int i = 0; i < templateNum; i++) {
       template = new Template();
diff --git 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/planner/plan/node/metedata/read/TimeSeriesSchemaScanNode.java
 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/planner/plan/node/metedata/read/TimeSeriesSchemaScanNode.java
index e1e7986b90e..598108896e4 100644
--- 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/planner/plan/node/metedata/read/TimeSeriesSchemaScanNode.java
+++ 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/planner/plan/node/metedata/read/TimeSeriesSchemaScanNode.java
@@ -29,6 +29,7 @@ import 
org.apache.iotdb.db.queryengine.plan.planner.plan.node.PlanNodeId;
 import org.apache.iotdb.db.queryengine.plan.planner.plan.node.PlanNodeType;
 import org.apache.iotdb.db.schemaengine.template.Template;
 
+import com.google.common.collect.Maps;
 import org.apache.tsfile.utils.ReadWriteIOUtils;
 
 import jakarta.validation.constraints.NotNull;
@@ -36,7 +37,6 @@ import jakarta.validation.constraints.NotNull;
 import java.io.DataOutputStream;
 import java.io.IOException;
 import java.nio.ByteBuffer;
-import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
 import java.util.Objects;
@@ -121,7 +121,7 @@ public class TimeSeriesSchemaScanNode extends 
SchemaQueryScanNode {
     boolean isPrefixPath = ReadWriteIOUtils.readBool(byteBuffer);
 
     int templateNum = ReadWriteIOUtils.readInt(byteBuffer);
-    Map<Integer, Template> templateMap = new HashMap<>();
+    Map<Integer, Template> templateMap = 
Maps.newHashMapWithExpectedSize(templateNum);
     Template template;
     for (int i = 0; i < templateNum; i++) {
       template = new Template();
diff --git 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/planner/plan/node/metedata/write/CreateAlignedTimeSeriesNode.java
 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/planner/plan/node/metedata/write/CreateAlignedTimeSeriesNode.java
index 1fda758e775..75dfb3026f2 100644
--- 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/planner/plan/node/metedata/write/CreateAlignedTimeSeriesNode.java
+++ 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/planner/plan/node/metedata/write/CreateAlignedTimeSeriesNode.java
@@ -151,7 +151,7 @@ public class CreateAlignedTimeSeriesNode extends 
WritePlanNode
   @Override
   public List<Long> getTagOffsets() {
     if (tagOffsets == null) {
-      tagOffsets = new ArrayList<>();
+      tagOffsets = new ArrayList<>(measurements.size());
       for (int i = 0; i < measurements.size(); i++) {
         tagOffsets.add(Long.parseLong("-1"));
       }
@@ -217,30 +217,30 @@ public class CreateAlignedTimeSeriesNode extends 
WritePlanNode
       throw new IllegalArgumentException("Can not deserialize 
CreateAlignedTimeSeriesNode", e);
     }
 
-    measurements = new ArrayList<>();
     int size = byteBuffer.getInt();
+    measurements = new ArrayList<>(size);
     for (int i = 0; i < size; i++) {
       measurements.add(ReadWriteIOUtils.readString(byteBuffer));
     }
 
-    dataTypes = new ArrayList<>();
+    dataTypes = new ArrayList<>(size);
     for (int i = 0; i < size; i++) {
       dataTypes.add(TSDataType.values()[byteBuffer.get()]);
     }
 
-    encodings = new ArrayList<>();
+    encodings = new ArrayList<>(size);
     for (int i = 0; i < size; i++) {
       encodings.add(TSEncoding.values()[byteBuffer.get()]);
     }
 
-    compressors = new ArrayList<>();
+    compressors = new ArrayList<>(size);
     for (int i = 0; i < size; i++) {
       compressors.add(CompressionType.deserialize(byteBuffer.get()));
     }
 
     byte label = byteBuffer.get();
     if (label >= 0) {
-      aliasList = new ArrayList<>();
+      aliasList = new ArrayList<>(label == 1 ? size : 0);
       if (label == 1) {
         for (int i = 0; i < size; i++) {
           aliasList.add(ReadWriteIOUtils.readString(byteBuffer));
@@ -250,7 +250,7 @@ public class CreateAlignedTimeSeriesNode extends 
WritePlanNode
 
     label = byteBuffer.get();
     if (label >= 0) {
-      tagsList = new ArrayList<>();
+      tagsList = new ArrayList<>(label == 1 ? size : 0);
       if (label == 1) {
         for (int i = 0; i < size; i++) {
           tagsList.add(ReadWriteIOUtils.readMap(byteBuffer));
@@ -260,7 +260,7 @@ public class CreateAlignedTimeSeriesNode extends 
WritePlanNode
 
     label = byteBuffer.get();
     if (label >= 0) {
-      attributesList = new ArrayList<>();
+      attributesList = new ArrayList<>(label == 1 ? size : 0);
       if (label == 1) {
         for (int i = 0; i < size; i++) {
           attributesList.add(ReadWriteIOUtils.readMap(byteBuffer));
diff --git 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/planner/plan/node/metedata/write/CreateMultiTimeSeriesNode.java
 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/planner/plan/node/metedata/write/CreateMultiTimeSeriesNode.java
index 94d3e407fb5..84b4d16d874 100644
--- 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/planner/plan/node/metedata/write/CreateMultiTimeSeriesNode.java
+++ 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/planner/plan/node/metedata/write/CreateMultiTimeSeriesNode.java
@@ -30,6 +30,7 @@ import 
org.apache.iotdb.db.queryengine.plan.planner.plan.node.PlanNodeType;
 import org.apache.iotdb.db.queryengine.plan.planner.plan.node.PlanVisitor;
 import org.apache.iotdb.db.queryengine.plan.planner.plan.node.WritePlanNode;
 
+import com.google.common.collect.Maps;
 import org.apache.tsfile.enums.TSDataType;
 import org.apache.tsfile.exception.NotImplementedException;
 import org.apache.tsfile.file.metadata.enums.CompressionType;
@@ -164,8 +165,8 @@ public class CreateMultiTimeSeriesNode extends 
WritePlanNode {
   }
 
   public static CreateMultiTimeSeriesNode deserialize(ByteBuffer byteBuffer) {
-    Map<PartialPath, MeasurementGroup> measurementGroupMap = new HashMap<>();
     int size = byteBuffer.getInt();
+    Map<PartialPath, MeasurementGroup> measurementGroupMap = 
Maps.newHashMapWithExpectedSize(size);
     PartialPath devicePath;
     MeasurementGroup measurementGroup;
     for (int i = 0; i < size; i++) {
diff --git 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/planner/plan/node/metedata/write/MeasurementGroup.java
 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/planner/plan/node/metedata/write/MeasurementGroup.java
index 9557e9c3279..d89c3f0fff9 100644
--- 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/planner/plan/node/metedata/write/MeasurementGroup.java
+++ 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/planner/plan/node/metedata/write/MeasurementGroup.java
@@ -341,31 +341,31 @@ public class MeasurementGroup {
   }
 
   public void deserialize(ByteBuffer byteBuffer) {
-    measurements = new ArrayList<>();
     int size = byteBuffer.getInt();
+    measurements = new ArrayList<>(size);
     for (int i = 0; i < size; i++) {
       measurements.add(ReadWriteIOUtils.readString(byteBuffer));
     }
     measurementSet.addAll(measurements);
 
-    dataTypes = new ArrayList<>();
+    dataTypes = new ArrayList<>(size);
     for (int i = 0; i < size; i++) {
       dataTypes.add(TSDataType.values()[byteBuffer.get()]);
     }
 
-    encodings = new ArrayList<>();
+    encodings = new ArrayList<>(size);
     for (int i = 0; i < size; i++) {
       encodings.add(TSEncoding.values()[byteBuffer.get()]);
     }
 
-    compressors = new ArrayList<>();
+    compressors = new ArrayList<>(size);
     for (int i = 0; i < size; i++) {
       compressors.add(CompressionType.deserialize(byteBuffer.get()));
     }
 
     byte label = byteBuffer.get();
     if (label >= 0) {
-      aliasList = new ArrayList<>();
+      aliasList = new ArrayList<>(label == 1 ? size : 0);
       if (label == 1) {
         for (int i = 0; i < size; i++) {
           aliasList.add(ReadWriteIOUtils.readString(byteBuffer));
@@ -375,7 +375,7 @@ public class MeasurementGroup {
 
     label = byteBuffer.get();
     if (label >= 0) {
-      tagsList = new ArrayList<>();
+      tagsList = new ArrayList<>(label == 1 ? size : 0);
       if (label == 1) {
         for (int i = 0; i < size; i++) {
           tagsList.add(ReadWriteIOUtils.readMap(byteBuffer));
@@ -385,7 +385,7 @@ public class MeasurementGroup {
 
     label = byteBuffer.get();
     if (label >= 0) {
-      attributesList = new ArrayList<>();
+      attributesList = new ArrayList<>(label == 1 ? size : 0);
       if (label == 1) {
         for (int i = 0; i < size; i++) {
           attributesList.add(ReadWriteIOUtils.readMap(byteBuffer));
diff --git 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/planner/plan/node/metedata/write/view/AlterLogicalViewNode.java
 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/planner/plan/node/metedata/write/view/AlterLogicalViewNode.java
index 7300684ef0a..d0f6e7dfa50 100644
--- 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/planner/plan/node/metedata/write/view/AlterLogicalViewNode.java
+++ 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/planner/plan/node/metedata/write/view/AlterLogicalViewNode.java
@@ -31,6 +31,7 @@ import 
org.apache.iotdb.db.queryengine.plan.planner.plan.node.PlanNodeType;
 import org.apache.iotdb.db.queryengine.plan.planner.plan.node.PlanVisitor;
 import org.apache.iotdb.rpc.TSStatusCode;
 
+import com.google.common.collect.Maps;
 import org.apache.tsfile.exception.NotImplementedException;
 import org.apache.tsfile.utils.ReadWriteIOUtils;
 
@@ -38,7 +39,6 @@ import java.io.DataOutputStream;
 import java.io.IOException;
 import java.nio.ByteBuffer;
 import java.util.ArrayList;
-import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
 import java.util.Objects;
@@ -158,8 +158,9 @@ public class AlterLogicalViewNode extends PlanNode {
 
   public static AlterLogicalViewNode deserialize(final ByteBuffer byteBuffer) {
     // deserialize member variables
-    final Map<PartialPath, ViewExpression> viewPathToSourceMap = new 
HashMap<>();
     final int size = byteBuffer.getInt();
+    final Map<PartialPath, ViewExpression> viewPathToSourceMap =
+        Maps.newHashMapWithExpectedSize(size);
     PartialPath path;
     ViewExpression viewExpression;
     for (int i = 0; i < size; i++) {
diff --git 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/planner/plan/node/metedata/write/view/CreateLogicalViewNode.java
 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/planner/plan/node/metedata/write/view/CreateLogicalViewNode.java
index 25ba8ec288b..9afc5a3cea6 100644
--- 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/planner/plan/node/metedata/write/view/CreateLogicalViewNode.java
+++ 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/planner/plan/node/metedata/write/view/CreateLogicalViewNode.java
@@ -33,6 +33,7 @@ import 
org.apache.iotdb.db.queryengine.plan.planner.plan.node.WritePlanNode;
 import 
org.apache.iotdb.db.schemaengine.schemaregion.view.visitor.GetSourcePathsVisitor;
 import 
org.apache.iotdb.db.schemaengine.schemaregion.write.req.view.ICreateLogicalViewPlan;
 
+import com.google.common.collect.Maps;
 import org.apache.tsfile.exception.NotImplementedException;
 import org.apache.tsfile.utils.ReadWriteIOUtils;
 
@@ -85,7 +86,7 @@ public class CreateLogicalViewNode extends WritePlanNode 
implements ICreateLogic
     if (paths.size() != expressions.size()) {
       return null;
     }
-    Map<PartialPath, ViewExpression> result = new HashMap<>();
+    Map<PartialPath, ViewExpression> result = 
Maps.newHashMapWithExpectedSize(paths.size());
     for (int i = 0; i < paths.size(); i++) {
       result.put(paths.get(i), expressions.get(i));
     }
@@ -205,8 +206,8 @@ public class CreateLogicalViewNode extends WritePlanNode 
implements ICreateLogic
 
   public static CreateLogicalViewNode deserialize(ByteBuffer byteBuffer) {
     // deserialize member variables
-    Map<PartialPath, ViewExpression> viewPathToSourceMap = new HashMap<>();
     int size = byteBuffer.getInt();
+    Map<PartialPath, ViewExpression> viewPathToSourceMap = 
Maps.newHashMapWithExpectedSize(size);
     PartialPath path;
     ViewExpression viewExpression;
     for (int i = 0; i < size; i++) {
diff --git 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/planner/plan/node/process/AggregationMergeSortNode.java
 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/planner/plan/node/process/AggregationMergeSortNode.java
index a5d73bd3875..5b60c5c728a 100644
--- 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/planner/plan/node/process/AggregationMergeSortNode.java
+++ 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/planner/plan/node/process/AggregationMergeSortNode.java
@@ -146,7 +146,7 @@ public class AggregationMergeSortNode extends 
MultiChildProcessNode {
   public static AggregationMergeSortNode deserialize(ByteBuffer byteBuffer) {
     OrderByParameter orderByParameter = 
OrderByParameter.deserialize(byteBuffer);
     int columnSize = ReadWriteIOUtils.readInt(byteBuffer);
-    List<String> outputColumns = new ArrayList<>();
+    List<String> outputColumns = new ArrayList<>(columnSize);
     while (columnSize > 0) {
       outputColumns.add(ReadWriteIOUtils.readString(byteBuffer));
       columnSize--;
diff --git 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/planner/plan/node/process/AggregationNode.java
 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/planner/plan/node/process/AggregationNode.java
index 83411d62678..96f3759bc9d 100644
--- 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/planner/plan/node/process/AggregationNode.java
+++ 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/planner/plan/node/process/AggregationNode.java
@@ -279,7 +279,7 @@ public class AggregationNode extends MultiChildProcessNode {
 
   public static AggregationNode deserialize(ByteBuffer byteBuffer) {
     int descriptorSize = ReadWriteIOUtils.readInt(byteBuffer);
-    List<AggregationDescriptor> aggregationDescriptorList = new ArrayList<>();
+    List<AggregationDescriptor> aggregationDescriptorList = new 
ArrayList<>(descriptorSize);
     while (descriptorSize > 0) {
       
aggregationDescriptorList.add(AggregationDescriptor.deserialize(byteBuffer));
       descriptorSize--;
diff --git 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/planner/plan/node/process/DeviceMergeNode.java
 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/planner/plan/node/process/DeviceMergeNode.java
index 799708d859b..891f7e96178 100644
--- 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/planner/plan/node/process/DeviceMergeNode.java
+++ 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/planner/plan/node/process/DeviceMergeNode.java
@@ -112,7 +112,7 @@ public class DeviceMergeNode extends MultiChildProcessNode {
   public static DeviceMergeNode deserialize(ByteBuffer byteBuffer) {
     OrderByParameter mergeOrderParameter = 
OrderByParameter.deserialize(byteBuffer);
     int devicesSize = ReadWriteIOUtils.readInt(byteBuffer);
-    List<String> devices = new ArrayList<>();
+    List<String> devices = new ArrayList<>(devicesSize);
     while (devicesSize > 0) {
       devices.add(ReadWriteIOUtils.readString(byteBuffer));
       devicesSize--;
diff --git 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/planner/plan/node/process/DeviceViewNode.java
 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/planner/plan/node/process/DeviceViewNode.java
index b6114e1f127..6a3e13ca886 100644
--- 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/planner/plan/node/process/DeviceViewNode.java
+++ 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/planner/plan/node/process/DeviceViewNode.java
@@ -25,13 +25,13 @@ import 
org.apache.iotdb.db.queryengine.plan.planner.plan.node.PlanNodeType;
 import org.apache.iotdb.db.queryengine.plan.planner.plan.node.PlanVisitor;
 import 
org.apache.iotdb.db.queryengine.plan.planner.plan.parameter.OrderByParameter;
 
+import com.google.common.collect.Maps;
 import org.apache.tsfile.utils.ReadWriteIOUtils;
 
 import java.io.DataOutputStream;
 import java.io.IOException;
 import java.nio.ByteBuffer;
 import java.util.ArrayList;
-import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
 import java.util.Objects;
@@ -178,21 +178,22 @@ public class DeviceViewNode extends MultiChildProcessNode 
{
     OrderByParameter mergeOrderParameter = 
OrderByParameter.deserialize(byteBuffer);
 
     int columnSize = ReadWriteIOUtils.readInt(byteBuffer);
-    List<String> outputColumnNames = new ArrayList<>();
+    List<String> outputColumnNames = new ArrayList<>(columnSize);
     while (columnSize > 0) {
       outputColumnNames.add(ReadWriteIOUtils.readString(byteBuffer));
       columnSize--;
     }
 
     int devicesSize = ReadWriteIOUtils.readInt(byteBuffer);
-    List<String> devices = new ArrayList<>();
+    List<String> devices = new ArrayList<>(devicesSize);
     while (devicesSize > 0) {
       devices.add(ReadWriteIOUtils.readString(byteBuffer));
       devicesSize--;
     }
 
     int mapSize = ReadWriteIOUtils.readInt(byteBuffer);
-    Map<String, List<Integer>> deviceToMeasurementIndexesMap = new 
HashMap<>(mapSize);
+    Map<String, List<Integer>> deviceToMeasurementIndexesMap =
+        Maps.newHashMapWithExpectedSize(mapSize);
     while (mapSize > 0) {
       String deviceName = ReadWriteIOUtils.readString(byteBuffer);
       int listSize = ReadWriteIOUtils.readInt(byteBuffer);
diff --git 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/planner/plan/node/process/GroupByLevelNode.java
 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/planner/plan/node/process/GroupByLevelNode.java
index e2212e8794a..0b2d2c77981 100644
--- 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/planner/plan/node/process/GroupByLevelNode.java
+++ 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/planner/plan/node/process/GroupByLevelNode.java
@@ -162,7 +162,8 @@ public class GroupByLevelNode extends MultiChildProcessNode 
{
 
   public static GroupByLevelNode deserialize(ByteBuffer byteBuffer) {
     int descriptorSize = ReadWriteIOUtils.readInt(byteBuffer);
-    List<CrossSeriesAggregationDescriptor> groupByLevelDescriptors = new 
ArrayList<>();
+    List<CrossSeriesAggregationDescriptor> groupByLevelDescriptors =
+        new ArrayList<>(descriptorSize);
     while (descriptorSize > 0) {
       
groupByLevelDescriptors.add(CrossSeriesAggregationDescriptor.deserialize(byteBuffer));
       descriptorSize--;
diff --git 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/planner/plan/node/process/GroupByTagNode.java
 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/planner/plan/node/process/GroupByTagNode.java
index fa6b210b63d..1ca33e9cb42 100644
--- 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/planner/plan/node/process/GroupByTagNode.java
+++ 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/planner/plan/node/process/GroupByTagNode.java
@@ -27,6 +27,7 @@ import 
org.apache.iotdb.db.queryengine.plan.planner.plan.parameter.CrossSeriesAg
 import 
org.apache.iotdb.db.queryengine.plan.planner.plan.parameter.GroupByTimeParameter;
 import org.apache.iotdb.db.queryengine.plan.statement.component.Ordering;
 
+import com.google.common.collect.Maps;
 import org.apache.commons.lang3.Validate;
 import org.apache.tsfile.utils.ReadWriteIOUtils;
 
@@ -36,7 +37,6 @@ import java.io.DataOutputStream;
 import java.io.IOException;
 import java.nio.ByteBuffer;
 import java.util.ArrayList;
-import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
 import java.util.Map.Entry;
@@ -251,11 +251,12 @@ public class GroupByTagNode extends MultiChildProcessNode 
{
     // Tag values to aggregation descriptors.
     int numOfEntries = ReadWriteIOUtils.readInt(byteBuffer);
     Map<List<String>, List<CrossSeriesAggregationDescriptor>> 
tagValuesToAggregationDescriptors =
-        new HashMap<>();
+        Maps.newHashMapWithExpectedSize(numOfEntries);
     while (numOfEntries > 0) {
       List<String> tagValues = ReadWriteIOUtils.readStringList(byteBuffer);
-      List<CrossSeriesAggregationDescriptor> aggregationDescriptors = new 
ArrayList<>();
       int numOfAggregationDescriptors = ReadWriteIOUtils.readInt(byteBuffer);
+      List<CrossSeriesAggregationDescriptor> aggregationDescriptors =
+          new ArrayList<>(numOfAggregationDescriptors);
       while (numOfAggregationDescriptors > 0) {
         byte isNotNull = ReadWriteIOUtils.readByte(byteBuffer);
         if (isNotNull == 1) {
diff --git 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/planner/plan/node/process/MergeSortNode.java
 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/planner/plan/node/process/MergeSortNode.java
index bcc54344a35..47b8996a94e 100644
--- 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/planner/plan/node/process/MergeSortNode.java
+++ 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/planner/plan/node/process/MergeSortNode.java
@@ -112,7 +112,7 @@ public class MergeSortNode extends MultiChildProcessNode {
   public static MergeSortNode deserialize(ByteBuffer byteBuffer) {
     OrderByParameter orderByParameter = 
OrderByParameter.deserialize(byteBuffer);
     int columnSize = ReadWriteIOUtils.readInt(byteBuffer);
-    List<String> outputColumns = new ArrayList<>();
+    List<String> outputColumns = new ArrayList<>(columnSize);
     while (columnSize > 0) {
       outputColumns.add(ReadWriteIOUtils.readString(byteBuffer));
       columnSize--;
diff --git 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/planner/plan/node/process/ProjectNode.java
 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/planner/plan/node/process/ProjectNode.java
index 2f13ea6d6de..e9dd32d8ecf 100644
--- 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/planner/plan/node/process/ProjectNode.java
+++ 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/planner/plan/node/process/ProjectNode.java
@@ -92,7 +92,7 @@ public class ProjectNode extends SingleChildProcessNode {
 
   public static ProjectNode deserialize(ByteBuffer byteBuffer) {
     int outputColumnNamesSize = ReadWriteIOUtils.readInt(byteBuffer);
-    List<String> outputColumnNames = new ArrayList<>();
+    List<String> outputColumnNames = new ArrayList<>(outputColumnNamesSize);
     while (outputColumnNamesSize > 0) {
       outputColumnNames.add(ReadWriteIOUtils.readString(byteBuffer));
       outputColumnNamesSize--;
diff --git 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/planner/plan/node/process/RawDataAggregationNode.java
 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/planner/plan/node/process/RawDataAggregationNode.java
index 066de467c14..f92c966a3c4 100644
--- 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/planner/plan/node/process/RawDataAggregationNode.java
+++ 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/planner/plan/node/process/RawDataAggregationNode.java
@@ -273,7 +273,7 @@ public class RawDataAggregationNode extends 
SingleChildProcessNode {
 
   public static RawDataAggregationNode deserialize(ByteBuffer byteBuffer) {
     int descriptorSize = ReadWriteIOUtils.readInt(byteBuffer);
-    List<AggregationDescriptor> aggregationDescriptorList = new ArrayList<>();
+    List<AggregationDescriptor> aggregationDescriptorList = new 
ArrayList<>(descriptorSize);
     while (descriptorSize > 0) {
       
aggregationDescriptorList.add(AggregationDescriptor.deserialize(byteBuffer));
       descriptorSize--;
diff --git 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/planner/plan/node/process/SingleDeviceViewNode.java
 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/planner/plan/node/process/SingleDeviceViewNode.java
index 263223c5d5c..555ecdb9942 100644
--- 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/planner/plan/node/process/SingleDeviceViewNode.java
+++ 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/planner/plan/node/process/SingleDeviceViewNode.java
@@ -156,7 +156,7 @@ public class SingleDeviceViewNode extends 
SingleChildProcessNode {
     List<String> outputColumnNames = null;
     if (cacheOutputColumnNames) {
       int columnSize = ReadWriteIOUtils.readInt(byteBuffer);
-      outputColumnNames = new ArrayList<>();
+      outputColumnNames = new ArrayList<>(columnSize);
       while (columnSize > 0) {
         outputColumnNames.add(ReadWriteIOUtils.readString(byteBuffer));
         columnSize--;
diff --git 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/planner/plan/node/process/SlidingWindowAggregationNode.java
 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/planner/plan/node/process/SlidingWindowAggregationNode.java
index cf4646c9c10..e74ed1191a5 100644
--- 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/planner/plan/node/process/SlidingWindowAggregationNode.java
+++ 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/planner/plan/node/process/SlidingWindowAggregationNode.java
@@ -170,7 +170,7 @@ public class SlidingWindowAggregationNode extends 
SingleChildProcessNode {
 
   public static SlidingWindowAggregationNode deserialize(ByteBuffer 
byteBuffer) {
     int descriptorSize = ReadWriteIOUtils.readInt(byteBuffer);
-    List<AggregationDescriptor> aggregationDescriptorList = new ArrayList<>();
+    List<AggregationDescriptor> aggregationDescriptorList = new 
ArrayList<>(descriptorSize);
     while (descriptorSize > 0) {
       
aggregationDescriptorList.add(AggregationDescriptor.deserialize(byteBuffer));
       descriptorSize--;
diff --git 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/planner/plan/node/process/TopKNode.java
 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/planner/plan/node/process/TopKNode.java
index 27b7d34cea3..2f75d3bbab9 100644
--- 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/planner/plan/node/process/TopKNode.java
+++ 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/planner/plan/node/process/TopKNode.java
@@ -129,7 +129,7 @@ public class TopKNode extends MultiChildProcessNode {
     int topValue = ReadWriteIOUtils.readInt(byteBuffer);
     OrderByParameter orderByParameter = 
OrderByParameter.deserialize(byteBuffer);
     int columnSize = ReadWriteIOUtils.readInt(byteBuffer);
-    List<String> outputColumns = new ArrayList<>();
+    List<String> outputColumns = new ArrayList<>(columnSize);
     while (columnSize > 0) {
       outputColumns.add(ReadWriteIOUtils.readString(byteBuffer));
       columnSize--;
diff --git 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/planner/plan/node/process/TransformNode.java
 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/planner/plan/node/process/TransformNode.java
index 2ca198dd2b8..b992fe29c34 100644
--- 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/planner/plan/node/process/TransformNode.java
+++ 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/planner/plan/node/process/TransformNode.java
@@ -68,7 +68,7 @@ public class TransformNode extends SingleChildProcessNode {
   @Override
   public final List<String> getOutputColumnNames() {
     if (outputColumnNames == null) {
-      outputColumnNames = new ArrayList<>();
+      outputColumnNames = new ArrayList<>(outputExpressions.length);
       for (Expression expression : outputExpressions) {
         outputColumnNames.add(expression.getExpressionString());
       }
diff --git 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/planner/plan/node/sink/IdentitySinkNode.java
 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/planner/plan/node/sink/IdentitySinkNode.java
index 46e7ae5aa6b..f4ca4fa07aa 100644
--- 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/planner/plan/node/sink/IdentitySinkNode.java
+++ 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/planner/plan/node/sink/IdentitySinkNode.java
@@ -100,7 +100,7 @@ public class IdentitySinkNode extends MultiChildrenSinkNode 
{
 
   public static IdentitySinkNode deserialize(ByteBuffer byteBuffer) {
     int size = ReadWriteIOUtils.readInt(byteBuffer);
-    List<DownStreamChannelLocation> downStreamChannelLocationList = new 
ArrayList<>();
+    List<DownStreamChannelLocation> downStreamChannelLocationList = new 
ArrayList<>(size);
     for (int i = 0; i < size; i++) {
       
downStreamChannelLocationList.add(DownStreamChannelLocation.deserialize(byteBuffer));
     }
diff --git 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/planner/plan/node/sink/ShuffleSinkNode.java
 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/planner/plan/node/sink/ShuffleSinkNode.java
index ec32f13b378..e173355aef0 100644
--- 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/planner/plan/node/sink/ShuffleSinkNode.java
+++ 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/planner/plan/node/sink/ShuffleSinkNode.java
@@ -99,7 +99,7 @@ public class ShuffleSinkNode extends MultiChildrenSinkNode {
 
   public static ShuffleSinkNode deserialize(ByteBuffer byteBuffer) {
     int size = ReadWriteIOUtils.readInt(byteBuffer);
-    List<DownStreamChannelLocation> downStreamChannelLocationList = new 
ArrayList<>();
+    List<DownStreamChannelLocation> downStreamChannelLocationList = new 
ArrayList<>(size);
     for (int i = 0; i < size; i++) {
       
downStreamChannelLocationList.add(DownStreamChannelLocation.deserialize(byteBuffer));
     }
diff --git 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/planner/plan/node/source/AlignedSeriesAggregationScanNode.java
 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/planner/plan/node/source/AlignedSeriesAggregationScanNode.java
index d81ca0c92bd..9cdec32cde0 100644
--- 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/planner/plan/node/source/AlignedSeriesAggregationScanNode.java
+++ 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/planner/plan/node/source/AlignedSeriesAggregationScanNode.java
@@ -248,7 +248,8 @@ public class AlignedSeriesAggregationScanNode extends 
SeriesAggregationSourceNod
   public static AlignedSeriesAggregationScanNode deserialize(ByteBuffer 
byteBuffer) {
     AlignedPath alignedPath = (AlignedPath) 
PathDeserializeUtil.deserialize(byteBuffer);
     int aggregateDescriptorSize = ReadWriteIOUtils.readInt(byteBuffer);
-    List<AggregationDescriptor> aggregationDescriptorList = new ArrayList<>();
+    List<AggregationDescriptor> aggregationDescriptorList =
+        new ArrayList<>(aggregateDescriptorSize);
     for (int i = 0; i < aggregateDescriptorSize; i++) {
       
aggregationDescriptorList.add(AggregationDescriptor.deserialize(byteBuffer));
     }
diff --git 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/planner/plan/node/source/AlignedSeriesScanNode.java
 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/planner/plan/node/source/AlignedSeriesScanNode.java
index 327899e4bf6..3f8a615a105 100644
--- 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/planner/plan/node/source/AlignedSeriesScanNode.java
+++ 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/planner/plan/node/source/AlignedSeriesScanNode.java
@@ -130,7 +130,7 @@ public class AlignedSeriesScanNode extends 
SeriesScanSourceNode {
 
   @Override
   public List<String> getOutputColumnNames() {
-    List<String> outputColumnNames = new ArrayList<>();
+    List<String> outputColumnNames = new 
ArrayList<>(alignedPath.getMeasurementList().size());
     String deviceName = alignedPath.getDevice();
     for (String measurement : alignedPath.getMeasurementList()) {
       outputColumnNames.add(deviceName.concat(TsFileConstant.PATH_SEPARATOR + 
measurement));
diff --git 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/planner/plan/node/source/DeviceRegionScanNode.java
 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/planner/plan/node/source/DeviceRegionScanNode.java
index a4db348342b..eba282a4bd2 100644
--- 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/planner/plan/node/source/DeviceRegionScanNode.java
+++ 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/planner/plan/node/source/DeviceRegionScanNode.java
@@ -32,6 +32,7 @@ import 
org.apache.iotdb.db.queryengine.plan.planner.plan.node.PlanNodeUtil;
 import org.apache.iotdb.db.queryengine.plan.planner.plan.node.PlanVisitor;
 
 import com.google.common.collect.ImmutableList;
+import com.google.common.collect.Maps;
 import org.apache.tsfile.utils.ReadWriteIOUtils;
 
 import java.io.DataOutputStream;
@@ -102,7 +103,7 @@ public class DeviceRegionScanNode extends RegionScanNode {
 
   public static PlanNode deserialize(ByteBuffer buffer) {
     int size = ReadWriteIOUtils.readInt(buffer);
-    Map<PartialPath, DeviceContext> devicePathToContextMap = new HashMap<>();
+    Map<PartialPath, DeviceContext> devicePathToContextMap = 
Maps.newHashMapWithExpectedSize(size);
     for (int i = 0; i < size; i++) {
       PartialPath path = (PartialPath) PathDeserializeUtil.deserialize(buffer);
       devicePathToContextMap.put(path, DeviceContext.deserialize(buffer));
diff --git 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/planner/plan/node/source/SeriesAggregationScanNode.java
 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/planner/plan/node/source/SeriesAggregationScanNode.java
index 54a186b98ce..8178cc19b57 100644
--- 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/planner/plan/node/source/SeriesAggregationScanNode.java
+++ 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/planner/plan/node/source/SeriesAggregationScanNode.java
@@ -238,7 +238,8 @@ public class SeriesAggregationScanNode extends 
SeriesAggregationSourceNode {
   public static SeriesAggregationScanNode deserialize(ByteBuffer byteBuffer) {
     MeasurementPath partialPath = (MeasurementPath) 
PathDeserializeUtil.deserialize(byteBuffer);
     int aggregateDescriptorSize = ReadWriteIOUtils.readInt(byteBuffer);
-    List<AggregationDescriptor> aggregationDescriptorList = new ArrayList<>();
+    List<AggregationDescriptor> aggregationDescriptorList =
+        new ArrayList<>(aggregateDescriptorSize);
     for (int i = 0; i < aggregateDescriptorSize; i++) {
       
aggregationDescriptorList.add(AggregationDescriptor.deserialize(byteBuffer));
     }
diff --git 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/planner/plan/node/source/TimeseriesRegionScanNode.java
 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/planner/plan/node/source/TimeseriesRegionScanNode.java
index d905c8eca2c..2e2e7cb2c23 100644
--- 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/planner/plan/node/source/TimeseriesRegionScanNode.java
+++ 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/planner/plan/node/source/TimeseriesRegionScanNode.java
@@ -35,6 +35,7 @@ import 
org.apache.iotdb.db.queryengine.plan.planner.plan.node.PlanNodeType;
 import org.apache.iotdb.db.queryengine.plan.planner.plan.node.PlanVisitor;
 
 import com.google.common.collect.ImmutableList;
+import com.google.common.collect.Maps;
 import org.apache.tsfile.utils.ReadWriteIOUtils;
 import org.apache.tsfile.write.schema.IMeasurementSchema;
 import org.apache.tsfile.write.schema.MeasurementSchema;
@@ -132,7 +133,7 @@ public class TimeseriesRegionScanNode extends 
RegionScanNode {
   public static PlanNode deserialize(ByteBuffer buffer) {
     int size = ReadWriteIOUtils.readInt(buffer);
     Map<PartialPath, Map<PartialPath, List<TimeseriesContext>>> 
deviceToTimeseriesSchemaInfo =
-        new HashMap<>();
+        Maps.newHashMapWithExpectedSize(size);
     for (int i = 0; i < size; i++) {
 
       int nodeSize = ReadWriteIOUtils.readInt(buffer);
@@ -143,11 +144,12 @@ public class TimeseriesRegionScanNode extends 
RegionScanNode {
       PartialPath devicePath = new PartialPath(nodes);
 
       int pathSize = ReadWriteIOUtils.readInt(buffer);
-      Map<PartialPath, List<TimeseriesContext>> measurementToSchemaInfo = new 
HashMap<>();
+      Map<PartialPath, List<TimeseriesContext>> measurementToSchemaInfo =
+          Maps.newHashMapWithExpectedSize(pathSize);
       for (int j = 0; j < pathSize; j++) {
         PartialPath path = deserializePartialPath(nodes, buffer);
         int schemaSize = ReadWriteIOUtils.readInt(buffer);
-        List<TimeseriesContext> schemaInfos = new ArrayList<>();
+        List<TimeseriesContext> schemaInfos = new ArrayList<>(schemaSize);
         for (int k = 0; k < schemaSize; k++) {
           schemaInfos.add(TimeseriesContext.deserialize(buffer));
         }
@@ -311,12 +313,12 @@ public class TimeseriesRegionScanNode extends 
RegionScanNode {
       return new MeasurementPath(newNodes);
     } else {
       int size = ReadWriteIOUtils.readInt(buffer);
-      List<String> measurements = new ArrayList<>();
-      List<IMeasurementSchema> schemaList = new ArrayList<>();
+      List<String> measurements = new ArrayList<>(size);
       for (int i = 0; i < size; i++) {
         measurements.add(ReadWriteIOUtils.readString(buffer));
       }
       size = ReadWriteIOUtils.readInt(buffer);
+      List<IMeasurementSchema> schemaList = new ArrayList<>(size);
       for (int i = 0; i < size; i++) {
         schemaList.add(MeasurementSchema.deserializeFrom(buffer));
       }
diff --git 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/planner/plan/node/write/InsertMultiTabletsNode.java
 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/planner/plan/node/write/InsertMultiTabletsNode.java
index 773881e398e..0f48c683533 100644
--- 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/planner/plan/node/write/InsertMultiTabletsNode.java
+++ 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/planner/plan/node/write/InsertMultiTabletsNode.java
@@ -204,10 +204,9 @@ public class InsertMultiTabletsNode extends InsertNode {
 
   public static InsertMultiTabletsNode deserialize(ByteBuffer byteBuffer) {
     PlanNodeId planNodeId;
-    List<InsertTabletNode> insertTabletNodeList = new ArrayList<>();
-    List<Integer> parentIndex = new ArrayList<>();
-
     int size = byteBuffer.getInt();
+    List<InsertTabletNode> insertTabletNodeList = new ArrayList<>(size);
+    List<Integer> parentIndex = new ArrayList<>(size);
     for (int i = 0; i < size; i++) {
       InsertTabletNode insertTabletNode = new InsertTabletNode(new 
PlanNodeId(""));
       insertTabletNode.subDeserialize(byteBuffer);
diff --git 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/planner/plan/node/write/InsertRowsNode.java
 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/planner/plan/node/write/InsertRowsNode.java
index 7ec81d626df..5b7e1fadf98 100644
--- 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/planner/plan/node/write/InsertRowsNode.java
+++ 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/planner/plan/node/write/InsertRowsNode.java
@@ -193,10 +193,9 @@ public class InsertRowsNode extends InsertNode implements 
WALEntryValue {
 
   public static InsertRowsNode deserialize(ByteBuffer byteBuffer) {
     PlanNodeId planNodeId;
-    List<InsertRowNode> insertRowNodeList = new ArrayList<>();
-    List<Integer> insertRowNodeIndex = new ArrayList<>();
-
     int size = byteBuffer.getInt();
+    List<InsertRowNode> insertRowNodeList = new ArrayList<>(size);
+    List<Integer> insertRowNodeIndex = new ArrayList<>(size);
     for (int i = 0; i < size; i++) {
       InsertRowNode insertRowNode = new InsertRowNode(new PlanNodeId(""));
       insertRowNode.subDeserialize(byteBuffer);
diff --git 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/planner/plan/parameter/model/ModelInferenceDescriptor.java
 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/planner/plan/parameter/model/ModelInferenceDescriptor.java
index bf5f391d9e4..21937fbb9b2 100644
--- 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/planner/plan/parameter/model/ModelInferenceDescriptor.java
+++ 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/planner/plan/parameter/model/ModelInferenceDescriptor.java
@@ -23,13 +23,13 @@ import org.apache.iotdb.common.rpc.thrift.TEndPoint;
 import org.apache.iotdb.commons.model.ModelInformation;
 import 
org.apache.iotdb.db.queryengine.execution.operator.window.ainode.InferenceWindowParameter;
 
+import com.google.common.collect.Maps;
 import org.apache.tsfile.utils.ReadWriteIOUtils;
 
 import java.io.DataOutputStream;
 import java.io.IOException;
 import java.nio.ByteBuffer;
 import java.util.ArrayList;
-import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
 import java.util.Objects;
@@ -55,7 +55,7 @@ public class ModelInferenceDescriptor {
     if (outputColumnNamesSize == 0) {
       this.outputColumnNames = null;
     } else {
-      this.outputColumnNames = new ArrayList<>();
+      this.outputColumnNames = new ArrayList<>(outputColumnNamesSize);
       for (int i = 0; i < outputColumnNamesSize; i++) {
         this.outputColumnNames.add(ReadWriteIOUtils.readString(buffer));
       }
@@ -70,7 +70,7 @@ public class ModelInferenceDescriptor {
     if (inferenceAttributesSize == 0) {
       this.inferenceAttributes = null;
     } else {
-      this.inferenceAttributes = new HashMap<>();
+      this.inferenceAttributes = 
Maps.newHashMapWithExpectedSize(inferenceAttributesSize);
       for (int i = 0; i < inferenceAttributesSize; i++) {
         this.inferenceAttributes.put(
             ReadWriteIOUtils.readString(buffer), 
ReadWriteIOUtils.readString(buffer));
diff --git 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/transformation/dag/column/CaseWhenThenColumnTransformer.java
 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/transformation/dag/column/CaseWhenThenColumnTransformer.java
index 94156d1c71b..7e1d5bc95e1 100644
--- 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/transformation/dag/column/CaseWhenThenColumnTransformer.java
+++ 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/transformation/dag/column/CaseWhenThenColumnTransformer.java
@@ -47,7 +47,7 @@ public class CaseWhenThenColumnTransformer extends 
ColumnTransformer {
     Validate.isTrue(
         whenTransformers.size() == thenTransformers.size(),
         "the size between whenTransformers and thenTransformers needs to be 
same");
-    this.whenThenTransformers = new ArrayList<>();
+    this.whenThenTransformers = new ArrayList<>(whenTransformers.size());
     for (int i = 0; i < whenTransformers.size(); i++) {
       this.whenThenTransformers.add(new Pair<>(whenTransformers.get(i), 
thenTransformers.get(i)));
     }
@@ -83,8 +83,8 @@ public class CaseWhenThenColumnTransformer extends 
ColumnTransformer {
 
   @Override
   protected void evaluate() {
-    List<Column> whenColumnList = new ArrayList<>();
-    List<Column> thenColumnList = new ArrayList<>();
+    List<Column> whenColumnList = new ArrayList<>(whenThenTransformers.size());
+    List<Column> thenColumnList = new ArrayList<>(whenThenTransformers.size());
     for (Pair<ColumnTransformer, ColumnTransformer> whenThenTransformer : 
whenThenTransformers) {
       whenThenTransformer.left.tryEvaluate();
       whenThenTransformer.right.tryEvaluate();
diff --git 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/schemaengine/schemaregion/logfile/visitor/SchemaRegionPlanDeserializer.java
 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/schemaengine/schemaregion/logfile/visitor/SchemaRegionPlanDeserializer.java
index 4c8c3120e41..c246d2efdbe 100644
--- 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/schemaengine/schemaregion/logfile/visitor/SchemaRegionPlanDeserializer.java
+++ 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/schemaengine/schemaregion/logfile/visitor/SchemaRegionPlanDeserializer.java
@@ -46,6 +46,7 @@ import 
org.apache.iotdb.db.schemaengine.schemaregion.write.req.view.IDeleteLogic
 import 
org.apache.iotdb.db.schemaengine.schemaregion.write.req.view.IPreDeleteLogicalViewPlan;
 import 
org.apache.iotdb.db.schemaengine.schemaregion.write.req.view.IRollbackPreDeleteLogicalViewPlan;
 
+import com.google.common.collect.Maps;
 import org.apache.tsfile.enums.TSDataType;
 import org.apache.tsfile.file.metadata.enums.CompressionType;
 import org.apache.tsfile.file.metadata.enums.TSEncoding;
@@ -155,31 +156,31 @@ public class SchemaRegionPlanDeserializer implements 
IDeserializer<ISchemaRegion
       }
 
       int size = ReadWriteIOUtils.readInt(buffer);
-      List<String> measurements = new ArrayList<>();
+      List<String> measurements = new ArrayList<>(size);
       for (int i = 0; i < size; i++) {
         measurements.add(ReadWriteIOUtils.readString(buffer));
       }
       createAlignedTimeSeriesPlan.setMeasurements(measurements);
 
-      List<TSDataType> dataTypes = new ArrayList<>();
+      List<TSDataType> dataTypes = new ArrayList<>(size);
       for (int i = 0; i < size; i++) {
         dataTypes.add(TSDataType.deserialize(buffer.get()));
       }
       createAlignedTimeSeriesPlan.setDataTypes(dataTypes);
 
-      List<TSEncoding> encodings = new ArrayList<>();
+      List<TSEncoding> encodings = new ArrayList<>(size);
       for (int i = 0; i < size; i++) {
         encodings.add(TSEncoding.deserialize(buffer.get()));
       }
       createAlignedTimeSeriesPlan.setEncodings(encodings);
 
-      List<CompressionType> compressors = new ArrayList<>();
+      List<CompressionType> compressors = new ArrayList<>(size);
       for (int i = 0; i < size; i++) {
         compressors.add(CompressionType.deserialize(buffer.get()));
       }
       createAlignedTimeSeriesPlan.setCompressors(compressors);
 
-      List<Long> tagOffsets = new ArrayList<>();
+      List<Long> tagOffsets = new ArrayList<>(size);
       for (int i = 0; i < size; i++) {
         tagOffsets.add(buffer.getLong());
       }
@@ -187,7 +188,7 @@ public class SchemaRegionPlanDeserializer implements 
IDeserializer<ISchemaRegion
 
       // alias
       if (buffer.get() == 1) {
-        List<String> aliasList = new ArrayList<>();
+        List<String> aliasList = new ArrayList<>(size);
         for (int i = 0; i < size; i++) {
           aliasList.add(ReadWriteIOUtils.readString(buffer));
         }
@@ -196,7 +197,7 @@ public class SchemaRegionPlanDeserializer implements 
IDeserializer<ISchemaRegion
 
       // tags
       if (buffer.get() == 1) {
-        List<Map<String, String>> tagsList = new ArrayList<>();
+        List<Map<String, String>> tagsList = new ArrayList<>(size);
         for (int i = 0; i < size; i++) {
           tagsList.add(ReadWriteIOUtils.readMap(buffer));
         }
@@ -205,7 +206,7 @@ public class SchemaRegionPlanDeserializer implements 
IDeserializer<ISchemaRegion
 
       // attributes
       if (buffer.get() == 1) {
-        List<Map<String, String>> attributesList = new ArrayList<>();
+        List<Map<String, String>> attributesList = new ArrayList<>(size);
         for (int i = 0; i < size; i++) {
           attributesList.add(ReadWriteIOUtils.readMap(buffer));
         }
@@ -267,7 +268,7 @@ public class SchemaRegionPlanDeserializer implements 
IDeserializer<ISchemaRegion
       int pathNumber = buffer.getInt();
 
       try {
-        List<PartialPath> deletePathList = new ArrayList<>();
+        List<PartialPath> deletePathList = new ArrayList<>(pathNumber);
         for (int i = 0; i < pathNumber; i++) {
           deletePathList.add(new 
PartialPath(ReadWriteIOUtils.readString(buffer)));
         }
@@ -349,7 +350,8 @@ public class SchemaRegionPlanDeserializer implements 
IDeserializer<ISchemaRegion
         ICreateLogicalViewPlan createLogicalViewPlan, ByteBuffer buffer) {
 
       int viewSize = buffer.getInt();
-      Map<PartialPath, ViewExpression> viewPathToSourceMap = new HashMap<>();
+      Map<PartialPath, ViewExpression> viewPathToSourceMap =
+          Maps.newHashMapWithExpectedSize(viewSize);
       for (int i = 0; i < viewSize; i++) {
         int byteSizeOfPath = buffer.getInt();
         byte[] bytesOfPath = new byte[byteSizeOfPath];
diff --git 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/memtable/AbstractMemTable.java
 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/memtable/AbstractMemTable.java
index 1b374ae40c5..906fb97b62d 100644
--- 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/memtable/AbstractMemTable.java
+++ 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/memtable/AbstractMemTable.java
@@ -190,7 +190,8 @@ public abstract class AbstractMemTable implements IMemTable 
{
     String[] measurements = insertRowNode.getMeasurements();
     Object[] values = insertRowNode.getValues();
 
-    List<IMeasurementSchema> schemaList = new ArrayList<>();
+    List<IMeasurementSchema> schemaList =
+        new ArrayList<>(measurements == null ? 0 : measurements.length);
     List<TSDataType> dataTypes = new ArrayList<>();
     int pointsInserted = 0;
     for (int i = 0; measurements != null && i < measurements.length; i++) {
@@ -222,7 +223,8 @@ public abstract class AbstractMemTable implements IMemTable 
{
 
     String[] measurements = insertRowNode.getMeasurements();
     Object[] values = insertRowNode.getValues();
-    List<IMeasurementSchema> schemaList = new ArrayList<>();
+    List<IMeasurementSchema> schemaList =
+        new ArrayList<>(measurements == null ? 0 : measurements.length);
     List<TSDataType> dataTypes = new ArrayList<>();
     int pointsInserted = 0;
     for (int i = 0; measurements != null && i < measurements.length; i++) {
@@ -333,7 +335,11 @@ public abstract class AbstractMemTable implements 
IMemTable {
   }
 
   public void writeTabletNode(InsertTabletNode insertTabletNode, int start, 
int end) {
-    List<IMeasurementSchema> schemaList = new ArrayList<>();
+    List<IMeasurementSchema> schemaList =
+        new ArrayList<>(
+            insertTabletNode.getMeasurements() == null
+                ? 0
+                : insertTabletNode.getMeasurements().length);
     for (int i = 0;
         insertTabletNode.getMeasurements() != null && i < 
insertTabletNode.getMeasurements().length;
         i++) {
@@ -356,7 +362,11 @@ public abstract class AbstractMemTable implements 
IMemTable {
 
   public void writeAlignedTablet(InsertTabletNode insertTabletNode, int start, 
int end) {
 
-    List<IMeasurementSchema> schemaList = new ArrayList<>();
+    List<IMeasurementSchema> schemaList =
+        new ArrayList<>(
+            insertTabletNode.getMeasurements() == null
+                ? 0
+                : insertTabletNode.getMeasurements().length);
     for (int i = 0;
         insertTabletNode.getMeasurements() != null && i < 
insertTabletNode.getMeasurements().length;
         i++) {
diff --git 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/memtable/AlignedWritableMemChunk.java
 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/memtable/AlignedWritableMemChunk.java
index f0a03964840..2c53a3ca916 100644
--- 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/memtable/AlignedWritableMemChunk.java
+++ 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/memtable/AlignedWritableMemChunk.java
@@ -1040,7 +1040,7 @@ public class AlignedWritableMemChunk extends 
AbstractWritableMemChunk {
       schemaList.add(schema);
     }
     int sortedListSize = stream.readInt();
-    List<AlignedTVList> sortedList = new ArrayList<>();
+    List<AlignedTVList> sortedList = new ArrayList<>(sortedListSize);
     for (int i = 0; i < sortedListSize; i++) {
       AlignedTVList tvList = AlignedTVList.deserialize(stream);
       sortedList.add(tvList);
diff --git 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/memtable/WritableMemChunk.java
 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/memtable/WritableMemChunk.java
index 544819c0391..30bfdb41a42 100644
--- 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/memtable/WritableMemChunk.java
+++ 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/memtable/WritableMemChunk.java
@@ -526,7 +526,7 @@ public class WritableMemChunk extends 
AbstractWritableMemChunk {
     WritableMemChunk memChunk = new WritableMemChunk();
     memChunk.schema = MeasurementSchema.deserializeFrom(stream);
     int sortedListSize = stream.readInt();
-    memChunk.sortedList = new ArrayList<>();
+    memChunk.sortedList = new ArrayList<>(sortedListSize);
     for (int i = 0; i < sortedListSize; i++) {
       TVList tvList = TVList.deserialize(stream);
       memChunk.sortedList.add(tvList);
diff --git 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/tsfile/timeindex/DeviceTimeIndex.java
 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/tsfile/timeindex/DeviceTimeIndex.java
index 2e492647073..45db903aac4 100644
--- 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/tsfile/timeindex/DeviceTimeIndex.java
+++ 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/tsfile/timeindex/DeviceTimeIndex.java
@@ -27,6 +27,7 @@ import 
org.apache.iotdb.db.exception.load.PartitionViolationException;
 import 
org.apache.iotdb.db.queryengine.plan.analyze.cache.schema.DataNodeDevicePathCache;
 import org.apache.iotdb.db.storageengine.dataregion.tsfile.TsFileResource;
 
+import com.google.common.collect.Sets;
 import com.google.common.util.concurrent.RateLimiter;
 import org.apache.tsfile.file.metadata.IDeviceID;
 import org.apache.tsfile.file.metadata.PlainDeviceID;
@@ -42,7 +43,6 @@ import java.io.InputStream;
 import java.io.OutputStream;
 import java.nio.ByteBuffer;
 import java.util.Arrays;
-import java.util.HashSet;
 import java.util.Map;
 import java.util.Map.Entry;
 import java.util.Optional;
@@ -198,7 +198,7 @@ public class DeviceTimeIndex implements ITimeIndex {
   public static Set<IDeviceID> getDevices(InputStream inputStream) throws 
IOException {
     int deviceNum = ReadWriteIOUtils.readInt(inputStream);
     ReadWriteIOUtils.skip(inputStream, 2L * deviceNum * 
ReadWriteIOUtils.LONG_LEN);
-    Set<IDeviceID> devices = new HashSet<>();
+    Set<IDeviceID> devices = Sets.newHashSetWithExpectedSize(deviceNum);
     for (int i = 0; i < deviceNum; i++) {
       String path =
           DataNodeDevicePathCache.getInstance()
diff --git 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/load/splitter/AlignedChunkData.java
 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/load/splitter/AlignedChunkData.java
index 1395eaa420d..fce2f0a9062 100644
--- 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/load/splitter/AlignedChunkData.java
+++ 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/load/splitter/AlignedChunkData.java
@@ -451,7 +451,7 @@ public class AlignedChunkData implements ChunkData {
     final long dataSize = ReadWriteIOUtils.readLong(stream);
     final boolean needDecodeChunk = ReadWriteIOUtils.readBool(stream);
     final int chunkHeaderListSize = ReadWriteIOUtils.readInt(stream);
-    final List<ChunkHeader> chunkHeaderList = new ArrayList<>();
+    final List<ChunkHeader> chunkHeaderList = new 
ArrayList<>(chunkHeaderListSize);
     for (int i = 0; i < chunkHeaderListSize; i++) {
       final byte chunkType = ReadWriteIOUtils.readByte(stream);
       ChunkHeader chunkHeader = ChunkHeader.deserializeFrom(stream, chunkType);
@@ -459,7 +459,7 @@ public class AlignedChunkData implements ChunkData {
       chunkHeader.setMeasurementID(MEASUREMENT_ID_CACHE.get(measurementID, m 
-> m));
       chunkHeaderList.add(chunkHeader);
     }
-    final List<Integer> pageNumbers = new ArrayList<>();
+    final List<Integer> pageNumbers = new ArrayList<>(needDecodeChunk ? 
chunkHeaderListSize : 0);
     if (needDecodeChunk) {
       for (int i = 0; i < chunkHeaderListSize; i++) {
         pageNumbers.add(ReadWriteIOUtils.readInt(stream));
diff --git 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/rescon/disk/strategy/RandomOnDiskUsableSpaceStrategy.java
 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/rescon/disk/strategy/RandomOnDiskUsableSpaceStrategy.java
index cf4b911c0bb..8cc6eabd8cd 100644
--- 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/rescon/disk/strategy/RandomOnDiskUsableSpaceStrategy.java
+++ 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/rescon/disk/strategy/RandomOnDiskUsableSpaceStrategy.java
@@ -55,7 +55,7 @@ public class RandomOnDiskUsableSpaceStrategy extends 
DirectoryStrategy {
 
   /** get space list of all folders. */
   public List<Long> getFolderUsableSpaceList() {
-    List<Long> spaceList = new ArrayList<>();
+    List<Long> spaceList = new ArrayList<>(folders.size());
     for (int i = 0; i < folders.size(); i++) {
       String folder = folders.get(i);
       spaceList.add(JVMCommonUtils.getUsableSpace(folder));
diff --git 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/utils/sort/DiskSpiller.java
 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/utils/sort/DiskSpiller.java
index c27b176bd9f..1999d220e1c 100644
--- 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/utils/sort/DiskSpiller.java
+++ 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/utils/sort/DiskSpiller.java
@@ -142,7 +142,7 @@ public class DiskSpiller {
   }
 
   private List<String> getFilePaths() {
-    List<String> filePaths = new ArrayList<>();
+    List<String> filePaths = new ArrayList<>(fileIndex);
     for (int i = 0; i < fileIndex; i++) {
       filePaths.add(filePrefix + String.format("%05d", i) + FILE_SUFFIX);
     }
@@ -151,7 +151,7 @@ public class DiskSpiller {
 
   public List<SortReader> getReaders(SortBufferManager sortBufferManager) 
throws IoTDBException {
     List<String> filePaths = getFilePaths();
-    List<SortReader> sortReaders = new ArrayList<>();
+    List<SortReader> sortReaders = new ArrayList<>(filePaths.size());
     try {
       for (String filePath : filePaths) {
         sortReaders.add(new FileSpillerReader(filePath, sortBufferManager, 
serde));
diff --git 
a/iotdb-core/node-commons/src/main/java/org/apache/iotdb/commons/auth/entity/Role.java
 
b/iotdb-core/node-commons/src/main/java/org/apache/iotdb/commons/auth/entity/Role.java
index 581df286ecd..7a18d975e39 100644
--- 
a/iotdb-core/node-commons/src/main/java/org/apache/iotdb/commons/auth/entity/Role.java
+++ 
b/iotdb-core/node-commons/src/main/java/org/apache/iotdb/commons/auth/entity/Role.java
@@ -22,6 +22,8 @@ import org.apache.iotdb.commons.path.PartialPath;
 import org.apache.iotdb.commons.utils.AuthUtils;
 import org.apache.iotdb.commons.utils.SerializeUtils;
 
+import com.google.common.collect.Sets;
+
 import java.io.ByteArrayOutputStream;
 import java.io.DataOutputStream;
 import java.io.IOException;
@@ -230,12 +232,12 @@ public class Role {
   public void deserialize(ByteBuffer buffer) {
     name = SerializeUtils.deserializeString(buffer);
     int sysPrivilegeSize = buffer.getInt();
-    sysPrivilegeSet = new HashSet<>();
+    sysPrivilegeSet = Sets.newHashSetWithExpectedSize(sysPrivilegeSize);
     for (int i = 0; i < sysPrivilegeSize; i++) {
       sysPrivilegeSet.add(buffer.getInt());
     }
     int sysPriGrantOptSize = buffer.getInt();
-    sysPriGrantOpt = new HashSet<>();
+    sysPriGrantOpt = Sets.newHashSetWithExpectedSize(sysPriGrantOptSize);
     for (int i = 0; i < sysPriGrantOptSize; i++) {
       sysPriGrantOpt.add(buffer.getInt());
     }
diff --git 
a/iotdb-core/node-commons/src/main/java/org/apache/iotdb/commons/auth/entity/User.java
 
b/iotdb-core/node-commons/src/main/java/org/apache/iotdb/commons/auth/entity/User.java
index 2b0b6eb304a..b037709cdbf 100644
--- 
a/iotdb-core/node-commons/src/main/java/org/apache/iotdb/commons/auth/entity/User.java
+++ 
b/iotdb-core/node-commons/src/main/java/org/apache/iotdb/commons/auth/entity/User.java
@@ -20,12 +20,13 @@ package org.apache.iotdb.commons.auth.entity;
 
 import org.apache.iotdb.commons.utils.SerializeUtils;
 
+import com.google.common.collect.Sets;
+
 import java.io.ByteArrayOutputStream;
 import java.io.DataOutputStream;
 import java.io.IOException;
 import java.nio.ByteBuffer;
 import java.util.ArrayList;
-import java.util.HashSet;
 import java.util.List;
 import java.util.Objects;
 import java.util.Set;
@@ -163,13 +164,13 @@ public class User extends Role {
     super.setName(SerializeUtils.deserializeString(buffer));
     password = SerializeUtils.deserializeString(buffer);
     int systemPriSize = buffer.getInt();
-    Set<Integer> sysPri = new HashSet<>();
+    Set<Integer> sysPri = Sets.newHashSetWithExpectedSize(systemPriSize);
     for (int i = 0; i < systemPriSize; i++) {
       sysPri.add(buffer.getInt());
     }
     super.setSysPrivilegeSet(sysPri);
     int sysPriGrantOptSize = buffer.getInt();
-    Set<Integer> grantOpt = new HashSet<>();
+    Set<Integer> grantOpt = 
Sets.newHashSetWithExpectedSize(sysPriGrantOptSize);
     for (int i = 0; i < sysPriGrantOptSize; i++) {
       grantOpt.add(buffer.getInt());
     }
diff --git 
a/iotdb-core/node-commons/src/main/java/org/apache/iotdb/commons/auth/user/LocalFileUserAccessor.java
 
b/iotdb-core/node-commons/src/main/java/org/apache/iotdb/commons/auth/user/LocalFileUserAccessor.java
index 03a07593677..52fe8b7a042 100644
--- 
a/iotdb-core/node-commons/src/main/java/org/apache/iotdb/commons/auth/user/LocalFileUserAccessor.java
+++ 
b/iotdb-core/node-commons/src/main/java/org/apache/iotdb/commons/auth/user/LocalFileUserAccessor.java
@@ -137,7 +137,7 @@ public class LocalFileUserAccessor implements IUserAccessor 
{
       if (oldVersion) {
         IOUtils.loadRolePrivilege(user, dataInputStream, STRING_ENCODING, 
strBufferLocal);
         int roleNum = dataInputStream.readInt();
-        List<String> roleList = new ArrayList<>();
+        List<String> roleList = new ArrayList<>(roleNum);
         for (int i = 0; i < roleNum; i++) {
           String roleName = IOUtils.readString(dataInputStream, 
STRING_ENCODING, strBufferLocal);
           roleList.add(roleName);
diff --git 
a/iotdb-core/node-commons/src/main/java/org/apache/iotdb/commons/consensus/index/impl/StateProgressIndex.java
 
b/iotdb-core/node-commons/src/main/java/org/apache/iotdb/commons/consensus/index/impl/StateProgressIndex.java
index 96a11989e7f..9081c6786c2 100644
--- 
a/iotdb-core/node-commons/src/main/java/org/apache/iotdb/commons/consensus/index/impl/StateProgressIndex.java
+++ 
b/iotdb-core/node-commons/src/main/java/org/apache/iotdb/commons/consensus/index/impl/StateProgressIndex.java
@@ -23,6 +23,7 @@ import org.apache.iotdb.commons.consensus.index.ProgressIndex;
 import org.apache.iotdb.commons.consensus.index.ProgressIndexType;
 
 import com.google.common.collect.ImmutableMap;
+import com.google.common.collect.Maps;
 import org.apache.tsfile.utils.Binary;
 import org.apache.tsfile.utils.RamUsageEstimator;
 import org.apache.tsfile.utils.ReadWriteIOUtils;
@@ -213,8 +214,8 @@ public class StateProgressIndex extends ProgressIndex {
   public static StateProgressIndex deserializeFrom(ByteBuffer byteBuffer) {
     final long version = ReadWriteIOUtils.readLong(byteBuffer);
 
-    final Map<String, Binary> state = new HashMap<>();
     final int size = ReadWriteIOUtils.readInt(byteBuffer);
+    final Map<String, Binary> state = Maps.newHashMapWithExpectedSize(size);
     for (int i = 0; i < size; ++i) {
       final String key = ReadWriteIOUtils.readString(byteBuffer);
       final Binary value = ReadWriteIOUtils.readBinary(byteBuffer);
@@ -229,8 +230,8 @@ public class StateProgressIndex extends ProgressIndex {
   public static StateProgressIndex deserializeFrom(InputStream stream) throws 
IOException {
     final long version = ReadWriteIOUtils.readLong(stream);
 
-    final Map<String, Binary> state = new HashMap<>();
     final int size = ReadWriteIOUtils.readInt(stream);
+    final Map<String, Binary> state = Maps.newHashMapWithExpectedSize(size);
     for (int i = 0; i < size; ++i) {
       final String key = ReadWriteIOUtils.readString(stream);
       final Binary value = ReadWriteIOUtils.readBinary(stream);
diff --git 
a/iotdb-core/node-commons/src/main/java/org/apache/iotdb/commons/model/ModelHyperparameter.java
 
b/iotdb-core/node-commons/src/main/java/org/apache/iotdb/commons/model/ModelHyperparameter.java
index 5f06f2dcabd..77b8b0b7aaf 100644
--- 
a/iotdb-core/node-commons/src/main/java/org/apache/iotdb/commons/model/ModelHyperparameter.java
+++ 
b/iotdb-core/node-commons/src/main/java/org/apache/iotdb/commons/model/ModelHyperparameter.java
@@ -56,7 +56,7 @@ public class ModelHyperparameter {
   }
 
   public List<String> toStringList() {
-    List<String> resultList = new ArrayList<>();
+    List<String> resultList = new ArrayList<>(keyValueMap.size());
     for (Map.Entry<String, String> keyValuePair : keyValueMap.entrySet()) {
       resultList.add(keyValuePair.getKey() + "=" + keyValuePair.getValue());
     }
diff --git 
a/iotdb-core/node-commons/src/main/java/org/apache/iotdb/commons/path/AlignedPath.java
 
b/iotdb-core/node-commons/src/main/java/org/apache/iotdb/commons/path/AlignedPath.java
index 846dfa6a7d0..eb91584d42c 100644
--- 
a/iotdb-core/node-commons/src/main/java/org/apache/iotdb/commons/path/AlignedPath.java
+++ 
b/iotdb-core/node-commons/src/main/java/org/apache/iotdb/commons/path/AlignedPath.java
@@ -345,14 +345,14 @@ public class AlignedPath extends PartialPath {
     PartialPath partialPath = PartialPath.deserialize(byteBuffer);
     AlignedPath alignedPath = new AlignedPath();
     int measurementSize = ReadWriteIOUtils.readInt(byteBuffer);
-    List<String> measurements = new ArrayList<>();
+    List<String> measurements = new ArrayList<>(measurementSize);
     for (int i = 0; i < measurementSize; i++) {
       measurements.add(ReadWriteIOUtils.readString(byteBuffer));
     }
     int measurementSchemaSize = ReadWriteIOUtils.readInt(byteBuffer);
     List<IMeasurementSchema> measurementSchemas = null;
     if (measurementSchemaSize != -1) {
-      measurementSchemas = new ArrayList<>();
+      measurementSchemas = new ArrayList<>(measurementSchemaSize);
       for (int i = 0; i < measurementSchemaSize; i++) {
         byte type = ReadWriteIOUtils.readByte(byteBuffer);
         if (type == 0) {
diff --git 
a/iotdb-core/node-commons/src/main/java/org/apache/iotdb/commons/path/PartialPath.java
 
b/iotdb-core/node-commons/src/main/java/org/apache/iotdb/commons/path/PartialPath.java
index 354724bd487..d9d940bfad1 100644
--- 
a/iotdb-core/node-commons/src/main/java/org/apache/iotdb/commons/path/PartialPath.java
+++ 
b/iotdb-core/node-commons/src/main/java/org/apache/iotdb/commons/path/PartialPath.java
@@ -870,7 +870,7 @@ public class PartialPath extends Path implements 
Comparable<Path>, Cloneable {
   }
 
   public static List<String> toStringList(List<PartialPath> pathList) {
-    List<String> ret = new ArrayList<>();
+    List<String> ret = new ArrayList<>(pathList.size());
     for (PartialPath path : pathList) {
       ret.add(path.getFullPath());
     }
diff --git 
a/iotdb-core/node-commons/src/main/java/org/apache/iotdb/commons/path/PathPatternNode.java
 
b/iotdb-core/node-commons/src/main/java/org/apache/iotdb/commons/path/PathPatternNode.java
index 3dd274b8c37..c7f778e1896 100644
--- 
a/iotdb-core/node-commons/src/main/java/org/apache/iotdb/commons/path/PathPatternNode.java
+++ 
b/iotdb-core/node-commons/src/main/java/org/apache/iotdb/commons/path/PathPatternNode.java
@@ -19,6 +19,7 @@
 
 package org.apache.iotdb.commons.path;
 
+import com.google.common.collect.Sets;
 import org.apache.tsfile.utils.Accountable;
 import org.apache.tsfile.utils.PublicBAOS;
 import org.apache.tsfile.utils.RamUsageEstimator;
@@ -256,7 +257,7 @@ public class PathPatternNode<V, VSerializer extends 
PathPatternNode.Serializer<V
     int typeOrValueSize = ReadWriteIOUtils.readInt(buffer);
     if (typeOrValueSize >= 0) {
       // measurement node in PatternTreeMap
-      Set<V> valueSet = new HashSet<>();
+      Set<V> valueSet = Sets.newHashSetWithExpectedSize(typeOrValueSize);
       for (int i = 0; i < typeOrValueSize; i++) {
         valueSet.add(serializer.read(buffer));
       }
diff --git 
a/iotdb-core/node-commons/src/main/java/org/apache/iotdb/commons/pipe/sink/payload/pipeconsensus/request/PipeConsensusTransferFileSealWithModReq.java
 
b/iotdb-core/node-commons/src/main/java/org/apache/iotdb/commons/pipe/sink/payload/pipeconsensus/request/PipeConsensusTransferFileSealWithModReq.java
index a5e2801668c..6000c157304 100644
--- 
a/iotdb-core/node-commons/src/main/java/org/apache/iotdb/commons/pipe/sink/payload/pipeconsensus/request/PipeConsensusTransferFileSealWithModReq.java
+++ 
b/iotdb-core/node-commons/src/main/java/org/apache/iotdb/commons/pipe/sink/payload/pipeconsensus/request/PipeConsensusTransferFileSealWithModReq.java
@@ -24,6 +24,7 @@ import org.apache.iotdb.commons.consensus.index.ProgressIndex;
 import org.apache.iotdb.consensus.pipe.thrift.TCommitId;
 import org.apache.iotdb.consensus.pipe.thrift.TPipeConsensusTransferReq;
 
+import com.google.common.collect.Maps;
 import org.apache.tsfile.utils.PublicBAOS;
 import org.apache.tsfile.utils.ReadWriteIOUtils;
 
@@ -31,7 +32,6 @@ import java.io.DataOutputStream;
 import java.io.IOException;
 import java.nio.ByteBuffer;
 import java.util.ArrayList;
-import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
 import java.util.Objects;
@@ -117,26 +117,26 @@ public abstract class 
PipeConsensusTransferFileSealWithModReq extends TPipeConse
 
   public PipeConsensusTransferFileSealWithModReq 
translateFromTPipeConsensusTransferReq(
       TPipeConsensusTransferReq req) {
-    fileNames = new ArrayList<>();
     int size = ReadWriteIOUtils.readInt(req.body);
+    fileNames = new ArrayList<>(size);
     for (int i = 0; i < size; ++i) {
       fileNames.add(ReadWriteIOUtils.readString(req.body));
     }
 
-    fileLengths = new ArrayList<>();
     size = ReadWriteIOUtils.readInt(req.body);
+    fileLengths = new ArrayList<>(size);
     for (int i = 0; i < size; ++i) {
       fileLengths.add(ReadWriteIOUtils.readLong(req.body));
     }
 
-    pointCounts = new ArrayList<>();
     size = ReadWriteIOUtils.readInt(req.body);
+    pointCounts = new ArrayList<>(size);
     for (int i = 0; i < size; ++i) {
       pointCounts.add(ReadWriteIOUtils.readLong(req.body));
     }
 
-    parameters = new HashMap<>();
     size = ReadWriteIOUtils.readInt(req.body);
+    parameters = Maps.newHashMapWithExpectedSize(size);
     for (int i = 0; i < size; ++i) {
       final String key = ReadWriteIOUtils.readString(req.body);
       final String value = ReadWriteIOUtils.readString(req.body);
diff --git 
a/iotdb-core/node-commons/src/main/java/org/apache/iotdb/commons/pipe/sink/payload/thrift/request/PipeTransferFileSealReqV2.java
 
b/iotdb-core/node-commons/src/main/java/org/apache/iotdb/commons/pipe/sink/payload/thrift/request/PipeTransferFileSealReqV2.java
index 976987d72fa..cbf8ed70fc9 100644
--- 
a/iotdb-core/node-commons/src/main/java/org/apache/iotdb/commons/pipe/sink/payload/thrift/request/PipeTransferFileSealReqV2.java
+++ 
b/iotdb-core/node-commons/src/main/java/org/apache/iotdb/commons/pipe/sink/payload/thrift/request/PipeTransferFileSealReqV2.java
@@ -21,6 +21,7 @@ package 
org.apache.iotdb.commons.pipe.sink.payload.thrift.request;
 
 import org.apache.iotdb.service.rpc.thrift.TPipeTransferReq;
 
+import com.google.common.collect.Maps;
 import org.apache.tsfile.utils.PublicBAOS;
 import org.apache.tsfile.utils.ReadWriteIOUtils;
 
@@ -28,7 +29,6 @@ import java.io.DataOutputStream;
 import java.io.IOException;
 import java.nio.ByteBuffer;
 import java.util.ArrayList;
-import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
 import java.util.Objects;
@@ -87,20 +87,20 @@ public abstract class PipeTransferFileSealReqV2 extends 
TPipeTransferReq {
   }
 
   public PipeTransferFileSealReqV2 
translateFromTPipeTransferReq(TPipeTransferReq req) {
-    fileNames = new ArrayList<>();
     int size = ReadWriteIOUtils.readInt(req.body);
+    fileNames = new ArrayList<>(size);
     for (int i = 0; i < size; ++i) {
       fileNames.add(ReadWriteIOUtils.readString(req.body));
     }
 
-    fileLengths = new ArrayList<>();
     size = ReadWriteIOUtils.readInt(req.body);
+    fileLengths = new ArrayList<>(size);
     for (int i = 0; i < size; ++i) {
       fileLengths.add(ReadWriteIOUtils.readLong(req.body));
     }
 
-    parameters = new HashMap<>();
     size = ReadWriteIOUtils.readInt(req.body);
+    parameters = Maps.newHashMapWithExpectedSize(size);
     for (int i = 0; i < size; ++i) {
       final String key = ReadWriteIOUtils.readString(req.body);
       final String value = ReadWriteIOUtils.readString(req.body);
diff --git 
a/iotdb-core/node-commons/src/main/java/org/apache/iotdb/commons/pipe/sink/payload/thrift/request/PipeTransferHandshakeV2Req.java
 
b/iotdb-core/node-commons/src/main/java/org/apache/iotdb/commons/pipe/sink/payload/thrift/request/PipeTransferHandshakeV2Req.java
index 9a81d844e3f..eeca8536295 100644
--- 
a/iotdb-core/node-commons/src/main/java/org/apache/iotdb/commons/pipe/sink/payload/thrift/request/PipeTransferHandshakeV2Req.java
+++ 
b/iotdb-core/node-commons/src/main/java/org/apache/iotdb/commons/pipe/sink/payload/thrift/request/PipeTransferHandshakeV2Req.java
@@ -21,13 +21,13 @@ package 
org.apache.iotdb.commons.pipe.sink.payload.thrift.request;
 
 import org.apache.iotdb.service.rpc.thrift.TPipeTransferReq;
 
+import com.google.common.collect.Maps;
 import org.apache.tsfile.utils.PublicBAOS;
 import org.apache.tsfile.utils.ReadWriteIOUtils;
 
 import java.io.DataOutputStream;
 import java.io.IOException;
 import java.nio.ByteBuffer;
-import java.util.HashMap;
 import java.util.Map;
 import java.util.Objects;
 
@@ -63,8 +63,8 @@ public abstract class PipeTransferHandshakeV2Req extends 
TPipeTransferReq {
 
   protected final PipeTransferHandshakeV2Req translateFromTPipeTransferReq(
       TPipeTransferReq transferReq) {
-    Map<String, String> params = new HashMap<>();
     final int size = ReadWriteIOUtils.readInt(transferReq.body);
+    Map<String, String> params = Maps.newHashMapWithExpectedSize(size);
     for (int i = 0; i < size; ++i) {
       final String key = ReadWriteIOUtils.readString(transferReq.body);
       final String value = ReadWriteIOUtils.readString(transferReq.body);
diff --git 
a/iotdb-core/node-commons/src/main/java/org/apache/iotdb/commons/schema/view/viewExpression/multi/FunctionViewExpression.java
 
b/iotdb-core/node-commons/src/main/java/org/apache/iotdb/commons/schema/view/viewExpression/multi/FunctionViewExpression.java
index eace4347717..596fe3ab587 100644
--- 
a/iotdb-core/node-commons/src/main/java/org/apache/iotdb/commons/schema/view/viewExpression/multi/FunctionViewExpression.java
+++ 
b/iotdb-core/node-commons/src/main/java/org/apache/iotdb/commons/schema/view/viewExpression/multi/FunctionViewExpression.java
@@ -81,7 +81,7 @@ public class FunctionViewExpression extends ViewExpression {
     functionName = ReadWriteIOUtils.readString(byteBuffer);
     functionAttributesKeyValueList = 
ReadWriteIOUtils.readStringList(byteBuffer);
     int expressionSize = ReadWriteIOUtils.readInt(byteBuffer);
-    expressions = new ArrayList<>();
+    expressions = new ArrayList<>(expressionSize);
     for (int i = 0; i < expressionSize; i++) {
       expressions.add(ViewExpression.deserialize(byteBuffer));
     }
@@ -92,7 +92,7 @@ public class FunctionViewExpression extends ViewExpression {
       functionName = ReadWriteIOUtils.readString(inputStream);
       functionAttributesKeyValueList = 
ReadWriteIOUtils.readStringList(inputStream);
       int expressionSize = ReadWriteIOUtils.readInt(inputStream);
-      expressions = new ArrayList<>();
+      expressions = new ArrayList<>(expressionSize);
       for (int i = 0; i < expressionSize; i++) {
         expressions.add(ViewExpression.deserialize(inputStream));
       }
diff --git 
a/iotdb-core/node-commons/src/main/java/org/apache/iotdb/commons/utils/AuthUtils.java
 
b/iotdb-core/node-commons/src/main/java/org/apache/iotdb/commons/utils/AuthUtils.java
index 20c991d470a..37d8af73c6e 100644
--- 
a/iotdb-core/node-commons/src/main/java/org/apache/iotdb/commons/utils/AuthUtils.java
+++ 
b/iotdb-core/node-commons/src/main/java/org/apache/iotdb/commons/utils/AuthUtils.java
@@ -465,7 +465,7 @@ public class AuthUtils {
 
   public static List<PartialPath> deserializePartialPathList(ByteBuffer 
buffer) {
     int size = buffer.getInt();
-    List<PartialPath> paths = new ArrayList<>();
+    List<PartialPath> paths = new ArrayList<>(size);
     for (int i = 0; i < size; i++) {
       paths.add((PartialPath) PathDeserializeUtil.deserialize(buffer));
     }
diff --git 
a/iotdb-core/node-commons/src/main/java/org/apache/iotdb/commons/utils/BasicStructureSerDeUtil.java
 
b/iotdb-core/node-commons/src/main/java/org/apache/iotdb/commons/utils/BasicStructureSerDeUtil.java
index 7d6ff521a87..bba21ef2f4a 100644
--- 
a/iotdb-core/node-commons/src/main/java/org/apache/iotdb/commons/utils/BasicStructureSerDeUtil.java
+++ 
b/iotdb-core/node-commons/src/main/java/org/apache/iotdb/commons/utils/BasicStructureSerDeUtil.java
@@ -19,11 +19,12 @@
 
 package org.apache.iotdb.commons.utils;
 
+import com.google.common.collect.Maps;
+
 import java.io.DataOutputStream;
 import java.io.IOException;
 import java.nio.ByteBuffer;
 import java.util.ArrayList;
-import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
 
@@ -52,7 +53,7 @@ public class BasicStructureSerDeUtil {
     if (size < 0) {
       return null;
     }
-    List<String> stringList = new ArrayList<>();
+    List<String> stringList = new ArrayList<>(size);
     for (int i = 0; i < size; i++) {
       stringList.add(readString(buffer));
     }
@@ -215,7 +216,7 @@ public class BasicStructureSerDeUtil {
     if (length == -1) {
       return null;
     }
-    Map<String, String> map = new HashMap<>(length);
+    Map<String, String> map = Maps.newHashMapWithExpectedSize(length);
     for (int i = 0; i < length; i++) {
       // key
       String key = readString(buffer);
@@ -261,13 +262,13 @@ public class BasicStructureSerDeUtil {
     if (length == -1) {
       return null;
     }
-    Map<String, List<String>> map = new HashMap<>(length);
+    Map<String, List<String>> map = Maps.newHashMapWithExpectedSize(length);
     for (int i = 0; i < length; i++) {
       // key
       String key = readString(buffer);
       // value
       int listSize = readInt(buffer);
-      List<String> valueList = new ArrayList<>();
+      List<String> valueList = new ArrayList<>(listSize);
       for (int j = 0; j < listSize; j++) {
         String value = readString(buffer);
         valueList.add(value);
@@ -303,13 +304,13 @@ public class BasicStructureSerDeUtil {
     if (length == -1) {
       return null;
     }
-    Map<Integer, List<Integer>> map = new HashMap<>(length);
+    Map<Integer, List<Integer>> map = Maps.newHashMapWithExpectedSize(length);
     for (int i = 0; i < length; i++) {
       // key
       int key = readInt(buffer);
       // value
       int listSize = readInt(buffer);
-      List<Integer> valueList = new ArrayList<>();
+      List<Integer> valueList = new ArrayList<>(listSize);
       for (int j = 0; j < listSize; j++) {
         int value = readInt(buffer);
         valueList.add(value);
diff --git 
a/iotdb-core/node-commons/src/main/java/org/apache/iotdb/commons/utils/IOUtils.java
 
b/iotdb-core/node-commons/src/main/java/org/apache/iotdb/commons/utils/IOUtils.java
index da6544717b3..8d771f9947b 100644
--- 
a/iotdb-core/node-commons/src/main/java/org/apache/iotdb/commons/utils/IOUtils.java
+++ 
b/iotdb-core/node-commons/src/main/java/org/apache/iotdb/commons/utils/IOUtils.java
@@ -234,7 +234,7 @@ public class IOUtils {
       throws IOException, IllegalPathException {
     role.setSysPrivilegeSet(0);
     int pathPriNum = inputStream.readInt();
-    List<PathPrivilege> pathPrivilegeList = new ArrayList<>();
+    List<PathPrivilege> pathPrivilegeList = new ArrayList<>(pathPriNum);
     for (int i = 0; i < pathPriNum; i++) {
       String path = IOUtils.readString(inputStream, encoding, strBufferLocal);
       PartialPath ppath = new PartialPath(path);
diff --git 
a/library-udf/src/main/java/org/apache/iotdb/library/dprofile/UDTFSegment.java 
b/library-udf/src/main/java/org/apache/iotdb/library/dprofile/UDTFSegment.java
index aead60e7942..aa0997cd7c2 100644
--- 
a/library-udf/src/main/java/org/apache/iotdb/library/dprofile/UDTFSegment.java
+++ 
b/library-udf/src/main/java/org/apache/iotdb/library/dprofile/UDTFSegment.java
@@ -104,7 +104,7 @@ public class UDTFSegment implements UDTF {
     } else if (method.equals("swab")) { // haven't tested yet
       seg = Segment.swabAlg(v, maxError, windowSize);
     }
-    ArrayList<double[]> res = new ArrayList<>();
+    ArrayList<double[]> res = new ArrayList<>(seg.size());
     for (double[] doubles : seg) {
       res.add(Segment.approximatedSegment(doubles));
     }
diff --git 
a/library-udf/src/main/java/org/apache/iotdb/library/match/PatternExecutor.java 
b/library-udf/src/main/java/org/apache/iotdb/library/match/PatternExecutor.java
index 4e5e7320670..fea5f60dbdd 100644
--- 
a/library-udf/src/main/java/org/apache/iotdb/library/match/PatternExecutor.java
+++ 
b/library-udf/src/main/java/org/apache/iotdb/library/match/PatternExecutor.java
@@ -112,7 +112,7 @@ public class PatternExecutor {
   }
 
   public List<Point> scalePoint(List<Long> times, List<Double> values) {
-    List<Point> points = new ArrayList<>();
+    List<Point> points = new ArrayList<>(times.size());
     TimeScale xScale = new TimeScale(times.get(0), times.get(times.size() - 
1), 0, 1000);
     double minY = values.stream().min(Double::compare).orElseGet(() -> 0.0);
     double maxY = values.stream().max(Double::compare).orElseGet(() -> 0.0);
@@ -199,7 +199,7 @@ public class PatternExecutor {
     if (points.size() < 2) {
       return new ArrayList<>();
     }
-    List<Double> tangents = new ArrayList<>();
+    List<Double> tangents = new ArrayList<>(points.size());
     tangents.add(tangent(points.get(0), points.get(1)));
     for (int i = 1; i < points.size(); i++) {
       tangents.add(tangent(points.get(i - 1), points.get(i)));

Reply via email to