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

Caideyipi pushed a commit to branch perf/presize-known-size-containers
in repository https://gitbox.apache.org/repos/asf/iotdb.git

commit 12b5ce01f64014e446755975f1684f7b9180e678
Author: Caideyipi <[email protected]>
AuthorDate: Tue Oct 13 15:28:38 2026 +0800

    Pre-size collections with known cardinality
---
 .../java/org/apache/iotdb/rpc/IoTDBJDBCDataSet.java    |  8 ++++----
 .../main/java/org/apache/iotdb/session/Session.java    | 14 +++++++-------
 .../org/apache/iotdb/session/SessionConnection.java    |  2 +-
 .../org/apache/iotdb/session/util/SessionUtils.java    |  2 +-
 .../operator/SimpleTsBlockWithPositionComparator.java  |  2 +-
 .../operator/process/FilterAndProjectOperator.java     |  6 ++++--
 .../operator/process/PatternRecognitionOperator.java   |  2 +-
 .../process/rowpattern/PatternPartitionExecutor.java   |  2 +-
 .../process/rowpattern/expression/Computation.java     |  2 +-
 .../process/rowpattern/expression/NaryComputation.java |  2 +-
 .../column/AbstractCaseWhenThenColumnTransformer.java  |  2 +-
 .../column/multi/LogicalAndMultiColumnTransformer.java |  2 +-
 .../column/multi/LogicalOrMultiColumnTransformer.java  |  2 +-
 .../dag/column/multi/MultiColumnTransformer.java       |  2 +-
 .../org/apache/iotdb/calc/utils/sort/DiskSpiller.java  |  4 ++--
 .../consensus/request/write/auth/AuthorTreePlan.java   |  4 ++--
 .../write/pipe/payload/PipeDeactivateTemplatePlan.java |  4 ++--
 .../write/pipe/task/OperateMultiplePipesPlanV2.java    |  2 +-
 .../subscription/topic/AlterMultipleTopicsPlan.java    |  2 +-
 .../impl/schema/DeactivateTemplateProcedure.java       |  3 ++-
 .../procedure/impl/sync/AuthOperationProcedure.java    |  2 +-
 .../iot/subscription/SubscriptionQueueRegistry.java    |  5 +++--
 .../exchange/payload/FetchCombineResultRequest.java    |  2 +-
 .../iotdb/db/queryengine/common/TimeseriesContext.java |  4 +++-
 .../fragment/FragmentInstanceFailureInfo.java          |  4 ++--
 .../execution/operator/process/TransformOperator.java  |  2 +-
 .../plan/expression/multi/FunctionExpression.java      |  4 ++--
 .../expression/visitor/ColumnTransformerVisitor.java   |  6 ++++--
 .../visitor/CompleteMeasurementSchemaVisitor.java      |  2 +-
 .../expression/visitor/IntermediateLayerVisitor.java   |  3 ++-
 .../node/metadata/read/LevelTimeSeriesCountNode.java   |  4 ++--
 .../node/metadata/read/SeriesSchemaFetchScanNode.java  |  4 ++--
 .../plan/node/metadata/read/TimeSeriesCountNode.java   |  4 ++--
 .../node/metadata/read/TimeSeriesSchemaScanNode.java   |  4 ++--
 .../metadata/write/CreateAlignedTimeSeriesNode.java    | 14 +++++++-------
 .../plan/node/metadata/write/MeasurementGroup.java     | 14 +++++++-------
 .../plan/planner/plan/node/sink/IdentitySinkNode.java  |  2 +-
 .../plan/planner/plan/node/sink/ShuffleSinkNode.java   |  2 +-
 .../node/source/AlignedSeriesAggregationScanNode.java  |  3 ++-
 .../planner/plan/node/source/DeviceRegionScanNode.java |  3 ++-
 .../plan/node/source/SeriesAggregationScanNode.java    |  3 ++-
 .../plan/node/source/TimeseriesRegionScanNode.java     | 10 ++++++----
 .../plan/node/write/InsertMultiTabletsNode.java        |  5 ++---
 .../plan/planner/plan/node/write/InsertRowsNode.java   |  5 ++---
 .../plan/node/write/RelationalInsertRowsNode.java      |  5 ++---
 .../plan/parameter/model/ModelInferenceDescriptor.java |  4 ++--
 .../schema/TableDeviceAttributeCommitUpdateNode.java   |  4 ++--
 .../logfile/visitor/SchemaRegionPlanDeserializer.java  | 18 +++++++++---------
 .../dataregion/memtable/AbstractMemTable.java          |  4 ++--
 .../dataregion/memtable/AlignedWritableMemChunk.java   |  2 +-
 .../dataregion/memtable/WritableMemChunk.java          |  2 +-
 .../tsfile/timeindex/ArrayDeviceTimeIndex.java         |  4 ++--
 .../tsfile/timeindex/PlainDeviceTimeIndex.java         |  4 ++--
 .../storageengine/load/splitter/AlignedChunkData.java  |  4 ++--
 .../org/apache/iotdb/commons/auth/entity/Role.java     |  2 +-
 .../iotdb/commons/auth/role/LocalFileRoleAccessor.java |  2 +-
 .../consensus/index/impl/StateProgressIndex.java       |  5 +++--
 .../disk/strategy/RandomOnDiskUsableSpaceStrategy.java |  2 +-
 .../iotdb/commons/model/ModelHyperparameter.java       |  2 +-
 .../org/apache/iotdb/commons/path/AlignedPath.java     |  4 ++--
 .../org/apache/iotdb/commons/path/PartialPath.java     |  2 +-
 .../org/apache/iotdb/commons/path/PathPatternNode.java |  4 ++--
 .../IoTConsensusV2TransferFileSealWithModReq.java      | 10 +++++-----
 .../thrift/request/PipeTransferFileSealReqV2.java      |  8 ++++----
 .../thrift/request/PipeTransferHandshakeV2Req.java     |  4 ++--
 .../planner/rowpattern/LogicalIndexPointer.java        |  4 ++--
 .../plan/relational/sql/ast/InListExpression.java      |  2 +-
 .../multichildren/AbstractMultiChildrenFilter.java     |  2 +-
 .../commons/schema/filter/impl/values/InFilter.java    |  4 ++--
 .../viewExpression/multi/FunctionViewExpression.java   |  4 ++--
 .../java/org/apache/iotdb/commons/utils/AuthUtils.java |  2 +-
 .../iotdb/commons/utils/BasicStructureSerDeUtil.java   | 15 ++++++++-------
 .../org/apache/iotdb/library/dprofile/UDTFSegment.java |  2 +-
 .../apache/iotdb/library/match/PatternExecutor.java    |  6 +++---
 74 files changed, 165 insertions(+), 152 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 b4516efa7c8..7ec09bce042 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
@@ -112,8 +112,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));
@@ -191,8 +191,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/session/src/main/java/org/apache/iotdb/session/Session.java 
b/iotdb-client/session/src/main/java/org/apache/iotdb/session/Session.java
index 5d20754fff4..fe9fb38f6db 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
@@ -2648,7 +2648,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));
@@ -2879,7 +2879,7 @@ public class Session implements ISession {
             (k, v) -> {
               if (v == null) {
                 List<String> measurements = new 
ArrayList<>(tablet.getSchemas().size());
-                List<TSDataType> dataTypes = new ArrayList<>();
+                List<TSDataType> dataTypes = new 
ArrayList<>(tablet.getSchemas().size());
                 tablet
                     .getSchemas()
                     .forEach(
@@ -3289,8 +3289,8 @@ public class Session implements ISession {
       return;
     }
     request.addToPrefixPaths(filtered.getDeviceId());
-    List<String> measurements = new ArrayList<>();
-    List<Integer> dataTypes = new ArrayList<>();
+    List<String> measurements = new ArrayList<>(filtered.getSchemas().size());
+    List<Integer> dataTypes = new ArrayList<>(filtered.getSchemas().size());
     request.setIsAligned(isAligned);
     for (IMeasurementSchema measurementSchema : filtered.getSchemas()) {
       if (measurementSchema.getMeasurementName() == null) {
@@ -3980,9 +3980,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/SessionConnection.java
 
b/iotdb-client/session/src/main/java/org/apache/iotdb/session/SessionConnection.java
index 6bcc41859a8..47ed514e0c8 100644
--- 
a/iotdb-client/session/src/main/java/org/apache/iotdb/session/SessionConnection.java
+++ 
b/iotdb-client/session/src/main/java/org/apache/iotdb/session/SessionConnection.java
@@ -1341,7 +1341,7 @@ public class SessionConnection {
     if (endPointList == null) {
       return MSG_RECONNECTION_FAIL;
     }
-    List<String> urls = new ArrayList<>();
+    List<String> urls = new ArrayList<>(endPointList.size());
     for (TEndPoint end : endPointList) {
       urls.add(UrlUtils.convertTEndPointIpv4AndIpv6Url(end));
     }
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 d6ff4d735ae..5203fffd915 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
@@ -296,7 +296,7 @@ public class SessionUtils {
     if (nodeUrls == null) {
       throw new NumberFormatException(SessionMessages.NODE_URLS_IS_NULL);
     }
-    List<TEndPoint> endPointsList = new ArrayList<>();
+    List<TEndPoint> endPointsList = new ArrayList<>(nodeUrls.size());
     for (String nodeUrl : nodeUrls) {
       try {
         endPointsList.add(UrlUtils.parseTEndPointIpv4AndIpv6Url(nodeUrl));
diff --git 
a/iotdb-core/calc-commons/src/main/java/org/apache/iotdb/calc/execution/operator/SimpleTsBlockWithPositionComparator.java
 
b/iotdb-core/calc-commons/src/main/java/org/apache/iotdb/calc/execution/operator/SimpleTsBlockWithPositionComparator.java
index 8cab1352032..5a068c53371 100644
--- 
a/iotdb-core/calc-commons/src/main/java/org/apache/iotdb/calc/execution/operator/SimpleTsBlockWithPositionComparator.java
+++ 
b/iotdb-core/calc-commons/src/main/java/org/apache/iotdb/calc/execution/operator/SimpleTsBlockWithPositionComparator.java
@@ -36,7 +36,7 @@ public class SimpleTsBlockWithPositionComparator implements 
TsBlockWithPositionC
 
   public SimpleTsBlockWithPositionComparator(
       List<TSDataType> types, List<Integer> sortChannels, List<SortOrder> 
sortOrders) {
-    List<TSDataType> sortedTypes = new ArrayList<>();
+    List<TSDataType> sortedTypes = new ArrayList<>(sortChannels.size());
     for (Integer sortChannel : sortChannels) {
       sortedTypes.add(types.get(sortChannel));
     }
diff --git 
a/iotdb-core/calc-commons/src/main/java/org/apache/iotdb/calc/execution/operator/process/FilterAndProjectOperator.java
 
b/iotdb-core/calc-commons/src/main/java/org/apache/iotdb/calc/execution/operator/process/FilterAndProjectOperator.java
index 5ab7e58a696..67d0d69874a 100644
--- 
a/iotdb-core/calc-commons/src/main/java/org/apache/iotdb/calc/execution/operator/process/FilterAndProjectOperator.java
+++ 
b/iotdb-core/calc-commons/src/main/java/org/apache/iotdb/calc/execution/operator/process/FilterAndProjectOperator.java
@@ -164,7 +164,9 @@ public class FilterAndProjectOperator implements 
ProcessOperator {
     // reuse this builder
     filterTsBlockBuilder.reset();
 
-    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));
     }
@@ -268,7 +270,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/calc-commons/src/main/java/org/apache/iotdb/calc/execution/operator/process/PatternRecognitionOperator.java
 
b/iotdb-core/calc-commons/src/main/java/org/apache/iotdb/calc/execution/operator/process/PatternRecognitionOperator.java
index d0ee968c0e5..28c184eb17d 100644
--- 
a/iotdb-core/calc-commons/src/main/java/org/apache/iotdb/calc/execution/operator/process/PatternRecognitionOperator.java
+++ 
b/iotdb-core/calc-commons/src/main/java/org/apache/iotdb/calc/execution/operator/process/PatternRecognitionOperator.java
@@ -117,7 +117,7 @@ public class PatternRecognitionOperator implements 
ProcessOperator {
     // Partition Part
     this.partitionChannels = ImmutableList.copyOf(partitionChannels);
     // Acquire partition channels' data types
-    List<TSDataType> partitionDataTypes = new ArrayList<>();
+    List<TSDataType> partitionDataTypes = new 
ArrayList<>(partitionChannels.size());
     for (Integer channel : partitionChannels) {
       partitionDataTypes.add(inputDataTypes.get(channel));
     }
diff --git 
a/iotdb-core/calc-commons/src/main/java/org/apache/iotdb/calc/execution/operator/process/rowpattern/PatternPartitionExecutor.java
 
b/iotdb-core/calc-commons/src/main/java/org/apache/iotdb/calc/execution/operator/process/rowpattern/PatternPartitionExecutor.java
index 82637f82125..4d475fbf405 100644
--- 
a/iotdb-core/calc-commons/src/main/java/org/apache/iotdb/calc/execution/operator/process/rowpattern/PatternPartitionExecutor.java
+++ 
b/iotdb-core/calc-commons/src/main/java/org/apache/iotdb/calc/execution/operator/process/rowpattern/PatternPartitionExecutor.java
@@ -118,7 +118,7 @@ public final class PatternPartitionExecutor {
     this.matchNumber = 1;
 
     // Prepare for peer group comparing
-    List<TSDataType> sortDataTypes = new ArrayList<>();
+    List<TSDataType> sortDataTypes = new ArrayList<>(sortChannels.size());
     for (int channel : sortChannels) {
       TSDataType dataType = dataTypes.get(channel);
       sortDataTypes.add(dataType);
diff --git 
a/iotdb-core/calc-commons/src/main/java/org/apache/iotdb/calc/execution/operator/process/rowpattern/expression/Computation.java
 
b/iotdb-core/calc-commons/src/main/java/org/apache/iotdb/calc/execution/operator/process/rowpattern/expression/Computation.java
index 59de959cd7c..860f8812d4f 100644
--- 
a/iotdb-core/calc-commons/src/main/java/org/apache/iotdb/calc/execution/operator/process/rowpattern/expression/Computation.java
+++ 
b/iotdb-core/calc-commons/src/main/java/org/apache/iotdb/calc/execution/operator/process/rowpattern/expression/Computation.java
@@ -108,7 +108,7 @@ public abstract class Computation {
         return new BinaryComputation(left, right, op);
       } else if (expression instanceof LogicalExpression) {
         LogicalExpression logicalExpr = (LogicalExpression) expression;
-        List<Computation> computations = new ArrayList<>();
+        List<Computation> computations = new 
ArrayList<>(logicalExpr.getTerms().size());
         for (Expression term : logicalExpr.getTerms()) {
           computations.add(parse(term, counter, symbolToIndex));
         }
diff --git 
a/iotdb-core/calc-commons/src/main/java/org/apache/iotdb/calc/execution/operator/process/rowpattern/expression/NaryComputation.java
 
b/iotdb-core/calc-commons/src/main/java/org/apache/iotdb/calc/execution/operator/process/rowpattern/expression/NaryComputation.java
index b077ccd1b35..c7862f1a524 100644
--- 
a/iotdb-core/calc-commons/src/main/java/org/apache/iotdb/calc/execution/operator/process/rowpattern/expression/NaryComputation.java
+++ 
b/iotdb-core/calc-commons/src/main/java/org/apache/iotdb/calc/execution/operator/process/rowpattern/expression/NaryComputation.java
@@ -33,7 +33,7 @@ public class NaryComputation extends Computation {
 
   @Override
   public Object evaluate(List<Object> values) {
-    List<Object> operandValues = new ArrayList<>();
+    List<Object> operandValues = new ArrayList<>(terms.size());
     for (Computation term : terms) {
       operandValues.add(term.evaluate(values));
     }
diff --git 
a/iotdb-core/calc-commons/src/main/java/org/apache/iotdb/calc/transformation/dag/column/AbstractCaseWhenThenColumnTransformer.java
 
b/iotdb-core/calc-commons/src/main/java/org/apache/iotdb/calc/transformation/dag/column/AbstractCaseWhenThenColumnTransformer.java
index 5603bde031d..8452a590a25 100644
--- 
a/iotdb-core/calc-commons/src/main/java/org/apache/iotdb/calc/transformation/dag/column/AbstractCaseWhenThenColumnTransformer.java
+++ 
b/iotdb-core/calc-commons/src/main/java/org/apache/iotdb/calc/transformation/dag/column/AbstractCaseWhenThenColumnTransformer.java
@@ -46,7 +46,7 @@ public abstract class AbstractCaseWhenThenColumnTransformer 
extends ColumnTransf
         whenTransformers.size() == thenTransformers.size(),
         CalcMessages
             
.EXCEPTION_THE_SIZE_BETWEEN_WHENTRANSFORMERS_AND_THENTRANSFORMERS_NEEDS_TO_BE_SAME_AC796883);
-    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)));
     }
diff --git 
a/iotdb-core/calc-commons/src/main/java/org/apache/iotdb/calc/transformation/dag/column/multi/LogicalAndMultiColumnTransformer.java
 
b/iotdb-core/calc-commons/src/main/java/org/apache/iotdb/calc/transformation/dag/column/multi/LogicalAndMultiColumnTransformer.java
index 7e8dce8502e..0510ce0c194 100644
--- 
a/iotdb-core/calc-commons/src/main/java/org/apache/iotdb/calc/transformation/dag/column/multi/LogicalAndMultiColumnTransformer.java
+++ 
b/iotdb-core/calc-commons/src/main/java/org/apache/iotdb/calc/transformation/dag/column/multi/LogicalAndMultiColumnTransformer.java
@@ -40,7 +40,7 @@ public class LogicalAndMultiColumnTransformer extends 
LogicalMultiColumnTransfor
     boolean[] selectionCopy = selection.clone();
     boolean[] hasNull = new boolean[selection.length];
 
-    List<Column> childrenColumns = new ArrayList<>();
+    List<Column> childrenColumns = new 
ArrayList<>(columnTransformerList.size());
     for (ColumnTransformer child : columnTransformerList) {
       child.evaluateWithSelection(selectionCopy);
       Column childColumn = child.getColumn();
diff --git 
a/iotdb-core/calc-commons/src/main/java/org/apache/iotdb/calc/transformation/dag/column/multi/LogicalOrMultiColumnTransformer.java
 
b/iotdb-core/calc-commons/src/main/java/org/apache/iotdb/calc/transformation/dag/column/multi/LogicalOrMultiColumnTransformer.java
index 32694820013..b754de9f13a 100644
--- 
a/iotdb-core/calc-commons/src/main/java/org/apache/iotdb/calc/transformation/dag/column/multi/LogicalOrMultiColumnTransformer.java
+++ 
b/iotdb-core/calc-commons/src/main/java/org/apache/iotdb/calc/transformation/dag/column/multi/LogicalOrMultiColumnTransformer.java
@@ -40,7 +40,7 @@ public class LogicalOrMultiColumnTransformer extends 
LogicalMultiColumnTransform
     boolean[] selectionCopy = selection.clone();
     boolean[] hasNull = new boolean[selection.length];
 
-    List<Column> childColumns = new ArrayList<>();
+    List<Column> childColumns = new ArrayList<>(columnTransformerList.size());
     for (ColumnTransformer child : columnTransformerList) {
       child.evaluateWithSelection(selectionCopy);
       Column childColumn = child.getColumn();
diff --git 
a/iotdb-core/calc-commons/src/main/java/org/apache/iotdb/calc/transformation/dag/column/multi/MultiColumnTransformer.java
 
b/iotdb-core/calc-commons/src/main/java/org/apache/iotdb/calc/transformation/dag/column/multi/MultiColumnTransformer.java
index 09cb1530bc4..827836a39cc 100644
--- 
a/iotdb-core/calc-commons/src/main/java/org/apache/iotdb/calc/transformation/dag/column/multi/MultiColumnTransformer.java
+++ 
b/iotdb-core/calc-commons/src/main/java/org/apache/iotdb/calc/transformation/dag/column/multi/MultiColumnTransformer.java
@@ -61,7 +61,7 @@ public abstract class MultiColumnTransformer extends 
ColumnTransformer {
 
   @Override
   public void evaluateWithSelection(boolean[] selection) {
-    List<Column> childrenColumns = new ArrayList<>();
+    List<Column> childrenColumns = new 
ArrayList<>(columnTransformerList.size());
 
     for (ColumnTransformer child : columnTransformerList) {
       child.evaluateWithSelection(selection);
diff --git 
a/iotdb-core/calc-commons/src/main/java/org/apache/iotdb/calc/utils/sort/DiskSpiller.java
 
b/iotdb-core/calc-commons/src/main/java/org/apache/iotdb/calc/utils/sort/DiskSpiller.java
index cdda259e2b0..cc7d91b3092 100644
--- 
a/iotdb-core/calc-commons/src/main/java/org/apache/iotdb/calc/utils/sort/DiskSpiller.java
+++ 
b/iotdb-core/calc-commons/src/main/java/org/apache/iotdb/calc/utils/sort/DiskSpiller.java
@@ -155,7 +155,7 @@ public abstract 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);
     }
@@ -164,7 +164,7 @@ public abstract 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/confignode/src/main/java/org/apache/iotdb/confignode/consensus/request/write/auth/AuthorTreePlan.java
 
b/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/consensus/request/write/auth/AuthorTreePlan.java
index a1f5a6d3c97..3775e20c824 100644
--- 
a/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/consensus/request/write/auth/AuthorTreePlan.java
+++ 
b/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/consensus/request/write/auth/AuthorTreePlan.java
@@ -24,13 +24,13 @@ import org.apache.iotdb.commons.path.PartialPath;
 import org.apache.iotdb.commons.utils.BasicStructureSerDeUtil;
 import org.apache.iotdb.confignode.consensus.request.ConfigPhysicalPlanType;
 
+import com.google.common.collect.Sets;
 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.HashSet;
 import java.util.List;
 import java.util.Objects;
 import java.util.Set;
@@ -244,7 +244,7 @@ public class AuthorTreePlan extends AuthorPlan {
       this.permissions = null;
     } else {
       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/pipe/payload/PipeDeactivateTemplatePlan.java
 
b/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/consensus/request/write/pipe/payload/PipeDeactivateTemplatePlan.java
index 6b09f7c9fef..e71aad9d92d 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.commons.schema.template.Template;
 import org.apache.iotdb.confignode.consensus.request.ConfigPhysicalPlan;
 import org.apache.iotdb.confignode.consensus.request.ConfigPhysicalPlanType;
 
+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(final ByteBuffer buffer) throws IOException {
     final int size = ReadWriteIOUtils.readInt(buffer);
-    templateSetInfo = new HashMap<>();
+    templateSetInfo = Maps.newHashMapWithExpectedSize(size);
     for (int i = 0; i < size; i++) {
       final PartialPath pattern = (PartialPath) 
PathDeserializeUtil.deserialize(buffer);
       final 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 d41e126101b..324d9603736 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
@@ -77,8 +77,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++) {
         final boolean isLastSubPlan = i == size - 1;
         short type = ReadWriteIOUtils.readShort(buffer);
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 b2875b7fc41..828ec9d8d6d 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
@@ -49,6 +49,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;
@@ -384,7 +385,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 e3ff2c08188..bf37a6de803 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
@@ -220,7 +220,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/consensus/src/main/java/org/apache/iotdb/consensus/iot/subscription/SubscriptionQueueRegistry.java
 
b/iotdb-core/consensus/src/main/java/org/apache/iotdb/consensus/iot/subscription/SubscriptionQueueRegistry.java
index 0cc06eeff52..d2de8f93fd9 100644
--- 
a/iotdb-core/consensus/src/main/java/org/apache/iotdb/consensus/iot/subscription/SubscriptionQueueRegistry.java
+++ 
b/iotdb-core/consensus/src/main/java/org/apache/iotdb/consensus/iot/subscription/SubscriptionQueueRegistry.java
@@ -88,7 +88,8 @@ public class SubscriptionQueueRegistry {
   }
 
   public synchronized Collection<SubscriptionWalRetentionPolicy> 
getRetentionPolicies() {
-    final Collection<SubscriptionWalRetentionPolicy> retentionPolicies = new 
ArrayList<>();
+    final Collection<SubscriptionWalRetentionPolicy> retentionPolicies =
+        new ArrayList<>(queues.size());
     for (final SubscriptionQueueRegistration registration : queues.values()) {
       retentionPolicies.add(registration.retentionPolicy);
     }
@@ -103,7 +104,7 @@ public class SubscriptionQueueRegistry {
       }
     }
 
-    final Collection<Long> retainedMinVersionIds = new ArrayList<>();
+    final Collection<Long> retainedMinVersionIds = new 
ArrayList<>(suppliers.size());
     for (final LongSupplier supplier : suppliers) {
       retainedMinVersionIds.add(supplier.getAsLong());
     }
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 84465e4ca75..c333e49a9a3 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
@@ -166,8 +166,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;
@@ -175,10 +173,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/TransformOperator.java
 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/execution/operator/process/TransformOperator.java
index e2c7984b499..9a4526c5bfe 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
@@ -288,7 +288,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/expression/multi/FunctionExpression.java
 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/expression/multi/FunctionExpression.java
index f977a24a1bb..a1b860880da 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
@@ -110,7 +110,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));
     }
@@ -305,7 +305,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 17871eda0b1..561358eecf5 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
@@ -387,8 +387,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 bac3b533f0c..341b8eee635 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 90109818be8..60d85f050e8 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
@@ -428,7 +428,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/metadata/read/LevelTimeSeriesCountNode.java
 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/planner/plan/node/metadata/read/LevelTimeSeriesCountNode.java
index b0e1e682ad7..073c17df26b 100644
--- 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/planner/plan/node/metadata/read/LevelTimeSeriesCountNode.java
+++ 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/planner/plan/node/metadata/read/LevelTimeSeriesCountNode.java
@@ -31,6 +31,7 @@ import org.apache.iotdb.commons.schema.filter.SchemaFilter;
 import org.apache.iotdb.commons.schema.template.Template;
 import org.apache.iotdb.db.i18n.DataNodeQueryMessages;
 
+import com.google.common.collect.Maps;
 import org.apache.tsfile.utils.ReadWriteIOUtils;
 
 import jakarta.validation.constraints.NotNull;
@@ -38,7 +39,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;
@@ -163,7 +163,7 @@ public class LevelTimeSeriesCountNode extends 
SchemaQueryScanNode {
     boolean includeSystemDatabase = ReadWriteIOUtils.readBool(buffer);
     boolean includeAuditDatabase = 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/metadata/read/SeriesSchemaFetchScanNode.java
 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/planner/plan/node/metadata/read/SeriesSchemaFetchScanNode.java
index 4509ebdc6f6..9b0a40636c4 100644
--- 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/planner/plan/node/metadata/read/SeriesSchemaFetchScanNode.java
+++ 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/planner/plan/node/metadata/read/SeriesSchemaFetchScanNode.java
@@ -30,12 +30,12 @@ import org.apache.iotdb.commons.schema.template.Template;
 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.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. */
@@ -131,7 +131,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/metadata/read/TimeSeriesCountNode.java
 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/planner/plan/node/metadata/read/TimeSeriesCountNode.java
index 2dafac1779f..1158de6c208 100644
--- 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/planner/plan/node/metadata/read/TimeSeriesCountNode.java
+++ 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/planner/plan/node/metadata/read/TimeSeriesCountNode.java
@@ -32,6 +32,7 @@ import org.apache.iotdb.commons.schema.filter.SchemaFilter;
 import org.apache.iotdb.commons.schema.template.Template;
 import org.apache.iotdb.db.i18n.DataNodeQueryMessages;
 
+import com.google.common.collect.Maps;
 import org.apache.tsfile.utils.ReadWriteIOUtils;
 
 import jakarta.validation.constraints.NotNull;
@@ -39,7 +40,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;
@@ -158,7 +158,7 @@ public class TimeSeriesCountNode extends 
SchemaQueryScanNode {
     boolean includeAuditDatabase = 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/metadata/read/TimeSeriesSchemaScanNode.java
 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/planner/plan/node/metadata/read/TimeSeriesSchemaScanNode.java
index 5a035d31c54..819153b7b57 100644
--- 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/planner/plan/node/metadata/read/TimeSeriesSchemaScanNode.java
+++ 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/planner/plan/node/metadata/read/TimeSeriesSchemaScanNode.java
@@ -32,6 +32,7 @@ import org.apache.iotdb.commons.schema.template.Template;
 import org.apache.iotdb.db.i18n.DataNodeQueryMessages;
 import org.apache.iotdb.db.queryengine.plan.statement.component.Ordering;
 
+import com.google.common.collect.Maps;
 import org.apache.tsfile.utils.ReadWriteIOUtils;
 
 import jakarta.validation.constraints.NotNull;
@@ -39,7 +40,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;
@@ -157,7 +157,7 @@ public class TimeSeriesSchemaScanNode extends 
SchemaQueryScanNode {
     }
 
     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/metadata/write/CreateAlignedTimeSeriesNode.java
 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/planner/plan/node/metadata/write/CreateAlignedTimeSeriesNode.java
index e9c57024647..f4bc37a0cee 100644
--- 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/planner/plan/node/metadata/write/CreateAlignedTimeSeriesNode.java
+++ 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/planner/plan/node/metadata/write/CreateAlignedTimeSeriesNode.java
@@ -221,30 +221,30 @@ public class CreateAlignedTimeSeriesNode extends 
WritePlanNode
           
DataNodeQueryMessages.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));
@@ -254,7 +254,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));
@@ -264,7 +264,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/metadata/write/MeasurementGroup.java
 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/planner/plan/node/metadata/write/MeasurementGroup.java
index 8667f6e21e1..699b904b669 100644
--- 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/planner/plan/node/metadata/write/MeasurementGroup.java
+++ 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/planner/plan/node/metadata/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/sink/IdentitySinkNode.java
 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/planner/plan/node/sink/IdentitySinkNode.java
index 6ce7fb1e2a7..c59a22f7f05 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
@@ -101,7 +101,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 8348d2d4644..b3804b355f6 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
@@ -100,7 +100,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 5c783ec88e9..463f0375a39 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
@@ -251,7 +251,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/DeviceRegionScanNode.java
 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/planner/plan/node/source/DeviceRegionScanNode.java
index af96dcc0878..3574fa859f5 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
@@ -34,6 +34,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;
@@ -105,7 +106,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 dd0fd381806..ac67601d849 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
@@ -241,7 +241,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 24bcf288403..397ccba0f24 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
@@ -36,6 +36,7 @@ import 
org.apache.iotdb.db.queryengine.common.TimeseriesContext;
 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;
@@ -145,11 +146,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));
         }
@@ -308,12 +310,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 8d484933e8f..81ec30db34f 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
@@ -228,10 +228,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 7071f9927c0..c2ba7c04791 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
@@ -229,10 +229,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/node/write/RelationalInsertRowsNode.java
 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/planner/plan/node/write/RelationalInsertRowsNode.java
index c76e7f327dd..4a98819c648 100644
--- 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/planner/plan/node/write/RelationalInsertRowsNode.java
+++ 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/planner/plan/node/write/RelationalInsertRowsNode.java
@@ -115,10 +115,9 @@ public class RelationalInsertRowsNode extends 
InsertRowsNode {
 
   public static RelationalInsertRowsNode 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++) {
       RelationalInsertRowNode insertRowNode = new RelationalInsertRowNode(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 1301ec97eb3..cb8b9deb585 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
@@ -21,13 +21,13 @@ package 
org.apache.iotdb.db.queryengine.plan.planner.plan.parameter.model;
 
 import org.apache.iotdb.commons.model.ModelInformation;
 
+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;
@@ -57,7 +57,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/plan/relational/planner/node/schema/TableDeviceAttributeCommitUpdateNode.java
 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/planner/node/schema/TableDeviceAttributeCommitUpdateNode.java
index 14ec0fbdfc6..188c435f2b6 100644
--- 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/planner/node/schema/TableDeviceAttributeCommitUpdateNode.java
+++ 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/planner/node/schema/TableDeviceAttributeCommitUpdateNode.java
@@ -30,13 +30,13 @@ import 
org.apache.iotdb.db.schemaengine.schemaregion.SchemaRegionPlanType;
 import org.apache.iotdb.db.schemaengine.schemaregion.SchemaRegionPlanVisitor;
 import 
org.apache.iotdb.db.schemaengine.schemaregion.attribute.update.DeviceAttributeCacheUpdater;
 
+import com.google.common.collect.Sets;
 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.HashSet;
 import java.util.List;
 import java.util.Map;
 import java.util.Set;
@@ -170,7 +170,7 @@ public class TableDeviceAttributeCommitUpdateNode extends 
PlanNode implements IS
     }
 
     size = ReadWriteIOUtils.readInt(buffer);
-    final Set<TDataNodeLocation> shrunkNodes = new HashSet<>();
+    final Set<TDataNodeLocation> shrunkNodes = 
Sets.newHashSetWithExpectedSize(size);
     for (int i = 0; i < size; ++i) {
       shrunkNodes.add(
           
DeviceAttributeCacheUpdater.deserializeNodeLocationForAttributeUpdate(buffer));
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 52fa8646187..326e7b1e849 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
@@ -174,31 +174,31 @@ public class SchemaRegionPlanDeserializer implements 
IDeserializer<ISchemaRegion
       }
 
       final int size = ReadWriteIOUtils.readInt(buffer);
-      final List<String> measurements = new ArrayList<>();
+      final List<String> measurements = new ArrayList<>(size);
       for (int i = 0; i < size; i++) {
         measurements.add(ReadWriteIOUtils.readString(buffer));
       }
       createAlignedTimeSeriesPlan.setMeasurements(measurements);
 
-      final List<TSDataType> dataTypes = new ArrayList<>();
+      final List<TSDataType> dataTypes = new ArrayList<>(size);
       for (int i = 0; i < size; i++) {
         dataTypes.add(TSDataType.deserialize(buffer.get()));
       }
       createAlignedTimeSeriesPlan.setDataTypes(dataTypes);
 
-      final List<TSEncoding> encodings = new ArrayList<>();
+      final List<TSEncoding> encodings = new ArrayList<>(size);
       for (int i = 0; i < size; i++) {
         encodings.add(TSEncoding.deserialize(buffer.get()));
       }
       createAlignedTimeSeriesPlan.setEncodings(encodings);
 
-      final List<CompressionType> compressors = new ArrayList<>();
+      final List<CompressionType> compressors = new ArrayList<>(size);
       for (int i = 0; i < size; i++) {
         compressors.add(CompressionType.deserialize(buffer.get()));
       }
       createAlignedTimeSeriesPlan.setCompressors(compressors);
 
-      final List<Long> tagOffsets = new ArrayList<>();
+      final List<Long> tagOffsets = new ArrayList<>(size);
       for (int i = 0; i < size; i++) {
         tagOffsets.add(buffer.getLong());
       }
@@ -206,7 +206,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));
         }
@@ -215,7 +215,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));
         }
@@ -224,7 +224,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));
         }
@@ -287,7 +287,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)));
         }
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 35a3696630e..5095ab45fd5 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
@@ -429,9 +429,9 @@ public abstract class AbstractMemTable implements IMemTable 
{
   }
 
   public void writeTabletNode(InsertTabletNode insertTabletNode, int start, 
int end) {
-    List<IMeasurementSchema> schemaList = new ArrayList<>();
     final int measurementSize =
         insertTabletNode.getMeasurements() == null ? 0 : 
insertTabletNode.getMeasurements().length;
+    List<IMeasurementSchema> schemaList = new ArrayList<>(measurementSize);
     final Object[] writableColumns = new Object[measurementSize];
     final BitMap[] writableBitMaps =
         insertTabletNode.getBitMaps() == null ? null : new 
BitMap[measurementSize];
@@ -475,9 +475,9 @@ public abstract class AbstractMemTable implements IMemTable 
{
       int end,
       TSStatus[] results,
       List<Pair<IDeviceID, Integer>> deviceEndOffsetPairs) {
-    List<IMeasurementSchema> schemaList = new ArrayList<>();
     final int measurementSize =
         insertTabletNode.getMeasurements() == null ? 0 : 
insertTabletNode.getMeasurements().length;
+    List<IMeasurementSchema> schemaList = new ArrayList<>(measurementSize);
     final Object[] writableColumns = new Object[measurementSize];
     final BitMap[] writableBitMaps =
         insertTabletNode.getBitMaps() == null ? null : new 
BitMap[measurementSize];
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 a24c0589933..1c670220f21 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
@@ -1235,7 +1235,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 7e54296c6a8..bc3d91fc3f7 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
@@ -470,7 +470,7 @@ public class WritableMemChunk extends 
AbstractWritableMemChunk {
         TypeServices.StorageEngine.TV_LIST_OBJECT_WRITER_SERVICE.call(
             Type.fromTsDataType(memChunk.schema.getType()));
     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/ArrayDeviceTimeIndex.java
 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/tsfile/timeindex/ArrayDeviceTimeIndex.java
index b38bb8b8cc9..8af037a5924 100644
--- 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/tsfile/timeindex/ArrayDeviceTimeIndex.java
+++ 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/tsfile/timeindex/ArrayDeviceTimeIndex.java
@@ -27,6 +27,7 @@ import org.apache.iotdb.db.i18n.StorageEngineMessages;
 import org.apache.iotdb.db.storageengine.dataregion.tsfile.TsFileResource;
 import org.apache.iotdb.db.utils.CommonUtils;
 
+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.IDeviceID.Deserializer;
@@ -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;
@@ -200,7 +200,7 @@ public class ArrayDeviceTimeIndex 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++) {
       IDeviceID deviceID = 
Deserializer.DEFAULT_DESERIALIZER.deserializeFrom(inputStream);
       ReadWriteIOUtils.skip(inputStream, ReadWriteIOUtils.INT_LEN);
diff --git 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/tsfile/timeindex/PlainDeviceTimeIndex.java
 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/tsfile/timeindex/PlainDeviceTimeIndex.java
index 785407ca40f..275b84e11c0 100644
--- 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/tsfile/timeindex/PlainDeviceTimeIndex.java
+++ 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/tsfile/timeindex/PlainDeviceTimeIndex.java
@@ -23,13 +23,13 @@ import 
org.apache.iotdb.commons.exception.IllegalPathException;
 import org.apache.iotdb.commons.path.PartialPath;
 import 
org.apache.iotdb.db.queryengine.plan.analyze.cache.schema.DataNodeDevicePathCache;
 
+import com.google.common.collect.Sets;
 import org.apache.tsfile.file.metadata.IDeviceID;
 import org.apache.tsfile.utils.ReadWriteIOUtils;
 
 import java.io.IOException;
 import java.io.InputStream;
 import java.nio.ByteBuffer;
-import java.util.HashSet;
 import java.util.Set;
 
 public class PlainDeviceTimeIndex extends ArrayDeviceTimeIndex implements 
ITimeIndex {
@@ -97,7 +97,7 @@ public class PlainDeviceTimeIndex extends 
ArrayDeviceTimeIndex implements ITimeI
   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 d8a8e6adce9..2e4e51301c4 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
@@ -399,7 +399,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);
@@ -407,7 +407,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/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 4c1a4baa78f..01f21a06e57 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
@@ -128,7 +128,7 @@ public class Role {
   }
 
   public List<TPathPrivilege> getTreePrivilegeInfo() {
-    List<TPathPrivilege> privilegeList = new ArrayList<>();
+    List<TPathPrivilege> privilegeList = new 
ArrayList<>(pathPrivilegeList.size());
     for (PathPrivilege pathPrivilege : pathPrivilegeList) {
       TPathPrivilege pathPriv = new TPathPrivilege();
       pathPriv.setPath(pathPrivilege.getPath().getFullPath());
diff --git 
a/iotdb-core/node-commons/src/main/java/org/apache/iotdb/commons/auth/role/LocalFileRoleAccessor.java
 
b/iotdb-core/node-commons/src/main/java/org/apache/iotdb/commons/auth/role/LocalFileRoleAccessor.java
index c6b20c2c137..abc5ea5dabf 100644
--- 
a/iotdb-core/node-commons/src/main/java/org/apache/iotdb/commons/auth/role/LocalFileRoleAccessor.java
+++ 
b/iotdb-core/node-commons/src/main/java/org/apache/iotdb/commons/auth/role/LocalFileRoleAccessor.java
@@ -160,7 +160,7 @@ public class LocalFileRoleAccessor implements 
IEntityAccessor {
       throws IOException, IllegalPathException {
     role.setSysPrivilegesWithMask(dataInputStream.readInt());
     int num = ReadWriteIOUtils.readInt(dataInputStream);
-    List<PathPrivilege> pathPrivilegeList = new ArrayList<>();
+    List<PathPrivilege> pathPrivilegeList = new ArrayList<>(num);
     for (int i = 0; i < num; i++) {
       pathPrivilegeList.add(
           IOUtils.readPathPrivilege(dataInputStream, STRING_ENCODING, 
strBufferLocal));
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 ed2b4d91145..26e18a3f7dc 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/disk/strategy/RandomOnDiskUsableSpaceStrategy.java
 
b/iotdb-core/node-commons/src/main/java/org/apache/iotdb/commons/disk/strategy/RandomOnDiskUsableSpaceStrategy.java
index 28264f142a1..ec46043a54a 100644
--- 
a/iotdb-core/node-commons/src/main/java/org/apache/iotdb/commons/disk/strategy/RandomOnDiskUsableSpaceStrategy.java
+++ 
b/iotdb-core/node-commons/src/main/java/org/apache/iotdb/commons/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);
       if (isUnavailableFolder(folder)) {
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 43502db0be8..07a3c7721e8 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
@@ -377,14 +377,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 9d71b0121bc..9041402be46 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
@@ -973,7 +973,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 56240432f69..03b5f02e04b 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;
@@ -30,7 +31,6 @@ import java.nio.ByteBuffer;
 import java.util.ArrayList;
 import java.util.Collection;
 import java.util.HashMap;
-import java.util.HashSet;
 import java.util.List;
 import java.util.Map;
 import java.util.Objects;
@@ -272,7 +272,7 @@ public class PathPatternNode<V, S extends 
PathPatternNode.Serializer<V>> impleme
     final int typeOrValueSize = ReadWriteIOUtils.readInt(buffer);
     if (typeOrValueSize >= 0) {
       // measurement node in PatternTreeMap
-      final Set<V> valueSet = new HashSet<>();
+      final 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/iotconsensusv2/request/IoTConsensusV2TransferFileSealWithModReq.java
 
b/iotdb-core/node-commons/src/main/java/org/apache/iotdb/commons/pipe/sink/payload/iotconsensusv2/request/IoTConsensusV2TransferFileSealWithModReq.java
index 188e3fbe4fc..67ff74b79c2 100644
--- 
a/iotdb-core/node-commons/src/main/java/org/apache/iotdb/commons/pipe/sink/payload/iotconsensusv2/request/IoTConsensusV2TransferFileSealWithModReq.java
+++ 
b/iotdb-core/node-commons/src/main/java/org/apache/iotdb/commons/pipe/sink/payload/iotconsensusv2/request/IoTConsensusV2TransferFileSealWithModReq.java
@@ -24,6 +24,7 @@ import org.apache.iotdb.commons.consensus.index.ProgressIndex;
 import org.apache.iotdb.consensus.iotconsensusv2.thrift.TCommitId;
 import 
org.apache.iotdb.consensus.iotconsensusv2.thrift.TIoTConsensusV2TransferReq;
 
+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 
IoTConsensusV2TransferFileSealWithModReq extends TIoTConse
 
   public IoTConsensusV2TransferFileSealWithModReq 
translateFromTIoTConsensusV2TransferReq(
       TIoTConsensusV2TransferReq 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 227d5871d8b..c6d0c580cea 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;
@@ -100,20 +100,20 @@ public abstract class PipeTransferFileSealReqV2 extends 
TPipeTransferReq {
   }
 
   public PipeTransferFileSealReqV2 translateFromTPipeTransferReq(final 
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 47267949472..8152ffe43e7 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,9 +63,9 @@ public abstract class PipeTransferHandshakeV2Req extends 
TPipeTransferReq {
 
   protected final PipeTransferHandshakeV2Req translateFromTPipeTransferReq(
       TPipeTransferReq transferReq) {
-    Map<String, String> params = new HashMap<>();
     final ByteBuffer bodyBuffer = transferReq.body.duplicate();
     final int size = ReadWriteIOUtils.readInt(bodyBuffer);
+    Map<String, String> params = Maps.newHashMapWithExpectedSize(size);
     for (int i = 0; i < size; ++i) {
       final String key = ReadWriteIOUtils.readString(bodyBuffer);
       final String value = ReadWriteIOUtils.readString(bodyBuffer);
diff --git 
a/iotdb-core/node-commons/src/main/java/org/apache/iotdb/commons/queryengine/plan/relational/planner/rowpattern/LogicalIndexPointer.java
 
b/iotdb-core/node-commons/src/main/java/org/apache/iotdb/commons/queryengine/plan/relational/planner/rowpattern/LogicalIndexPointer.java
index ac1d0d71950..5b0e85cf3cf 100644
--- 
a/iotdb-core/node-commons/src/main/java/org/apache/iotdb/commons/queryengine/plan/relational/planner/rowpattern/LogicalIndexPointer.java
+++ 
b/iotdb-core/node-commons/src/main/java/org/apache/iotdb/commons/queryengine/plan/relational/planner/rowpattern/LogicalIndexPointer.java
@@ -21,12 +21,12 @@ package 
org.apache.iotdb.commons.queryengine.plan.relational.planner.rowpattern;
 
 import org.apache.iotdb.commons.i18n.QueryMessages;
 
+import com.google.common.collect.Sets;
 import org.apache.tsfile.utils.ReadWriteIOUtils;
 
 import java.io.DataOutputStream;
 import java.io.IOException;
 import java.nio.ByteBuffer;
-import java.util.HashSet;
 import java.util.Objects;
 import java.util.Set;
 
@@ -144,7 +144,7 @@ public class LogicalIndexPointer {
 
   public static LogicalIndexPointer deserialize(ByteBuffer byteBuffer) {
     int labelCount = ReadWriteIOUtils.readInt(byteBuffer);
-    Set<IrLabel> labels = new HashSet<>();
+    Set<IrLabel> labels = Sets.newHashSetWithExpectedSize(labelCount);
     for (int i = 0; i < labelCount; i++) {
       labels.add(IrLabel.deserialize(byteBuffer));
     }
diff --git 
a/iotdb-core/node-commons/src/main/java/org/apache/iotdb/commons/queryengine/plan/relational/sql/ast/InListExpression.java
 
b/iotdb-core/node-commons/src/main/java/org/apache/iotdb/commons/queryengine/plan/relational/sql/ast/InListExpression.java
index 24bf8976caa..336dee747a4 100644
--- 
a/iotdb-core/node-commons/src/main/java/org/apache/iotdb/commons/queryengine/plan/relational/sql/ast/InListExpression.java
+++ 
b/iotdb-core/node-commons/src/main/java/org/apache/iotdb/commons/queryengine/plan/relational/sql/ast/InListExpression.java
@@ -59,7 +59,7 @@ public class InListExpression extends Expression {
   public InListExpression(ByteBuffer byteBuffer) {
     super(null);
     int size = ReadWriteIOUtils.readInt(byteBuffer);
-    this.values = new ArrayList<>();
+    this.values = new ArrayList<>(size);
     for (int i = 0; i < size; i++) {
       values.add(Expression.deserialize(byteBuffer));
     }
diff --git 
a/iotdb-core/node-commons/src/main/java/org/apache/iotdb/commons/schema/filter/impl/multichildren/AbstractMultiChildrenFilter.java
 
b/iotdb-core/node-commons/src/main/java/org/apache/iotdb/commons/schema/filter/impl/multichildren/AbstractMultiChildrenFilter.java
index 888f9675caa..c3da760aec9 100644
--- 
a/iotdb-core/node-commons/src/main/java/org/apache/iotdb/commons/schema/filter/impl/multichildren/AbstractMultiChildrenFilter.java
+++ 
b/iotdb-core/node-commons/src/main/java/org/apache/iotdb/commons/schema/filter/impl/multichildren/AbstractMultiChildrenFilter.java
@@ -43,7 +43,7 @@ public abstract class AbstractMultiChildrenFilter extends 
SchemaFilter {
 
   protected AbstractMultiChildrenFilter(final ByteBuffer byteBuffer) {
     final int num = ReadWriteIOUtils.readInt(byteBuffer);
-    children = new ArrayList<>();
+    children = new ArrayList<>(num);
     for (int i = 0; i < num; ++i) {
       this.children.add(SchemaFilter.deserialize(byteBuffer));
     }
diff --git 
a/iotdb-core/node-commons/src/main/java/org/apache/iotdb/commons/schema/filter/impl/values/InFilter.java
 
b/iotdb-core/node-commons/src/main/java/org/apache/iotdb/commons/schema/filter/impl/values/InFilter.java
index 5df2993825d..20198bc36e9 100644
--- 
a/iotdb-core/node-commons/src/main/java/org/apache/iotdb/commons/schema/filter/impl/values/InFilter.java
+++ 
b/iotdb-core/node-commons/src/main/java/org/apache/iotdb/commons/schema/filter/impl/values/InFilter.java
@@ -24,13 +24,13 @@ import 
org.apache.iotdb.commons.schema.filter.SchemaFilterType;
 import org.apache.iotdb.commons.schema.filter.SchemaFilterVisitor;
 import org.apache.iotdb.commons.schema.filter.impl.multichildren.OrFilter;
 
+import com.google.common.collect.Sets;
 import org.apache.tsfile.utils.RamUsageEstimator;
 import org.apache.tsfile.utils.ReadWriteIOUtils;
 
 import java.io.DataOutputStream;
 import java.io.IOException;
 import java.nio.ByteBuffer;
-import java.util.HashSet;
 import java.util.Objects;
 import java.util.Set;
 
@@ -50,7 +50,7 @@ public class InFilter extends SchemaFilter {
 
   public InFilter(final ByteBuffer byteBuffer) {
     final int length = ReadWriteIOUtils.readInt(byteBuffer);
-    this.values = new HashSet<>();
+    this.values = Sets.newHashSetWithExpectedSize(length);
     for (int i = 0; i < length; ++i) {
       values.add(ReadWriteIOUtils.readString(byteBuffer));
     }
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 1f73f59ae00..fcd4c1c6f97 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 1e01dbeaee7..ccd254e1d20 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
@@ -545,7 +545,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 e797779b832..79dbc001105 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
@@ -21,11 +21,12 @@ package org.apache.iotdb.commons.utils;
 
 import org.apache.iotdb.commons.i18n.UtilMessages;
 
+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;
 
@@ -54,7 +55,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));
     }
@@ -217,7 +218,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);
@@ -263,13 +264,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);
@@ -305,13 +306,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/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..565f24156df 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);
@@ -129,7 +129,7 @@ public class PatternExecutor {
   }
 
   public List<Point> scalePoint(List<Point> sourcePoints) {
-    List<Point> points = new ArrayList<>();
+    List<Point> points = new ArrayList<>(sourcePoints.size());
     TimeScale xScale =
         new TimeScale(
             (long) sourcePoints.get(0).getX(),
@@ -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