You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@iotdb.apache.org by yu...@apache.org on 2022/01/25 17:27:48 UTC

[iotdb] branch kyy-2022 updated: single timestamp

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

yuyuankang pushed a commit to branch kyy-2022
in repository https://gitbox.apache.org/repos/asf/iotdb.git


The following commit(s) were added to refs/heads/kyy-2022 by this push:
     new ee1ac3f  single timestamp
ee1ac3f is described below

commit ee1ac3f88150a3364e8eb5204fd8744f5f777140
Author: Ring-k <yu...@hotmail.com>
AuthorDate: Wed Jan 26 01:26:54 2022 +0800

    single timestamp
---
 .../db/query/aggregation/AggregateResult.java      |   4 +-
 .../query/aggregation/impl/MaxValueAggrResult.java |  27 ++---
 .../query/aggregation/impl/MinValueAggrResult.java |  29 ++----
 .../iotdb/db/integration/IOTDBGroupByIT.java       |   8 +-
 .../aggregation/IoTDBAggregationLargeDataIT.java   | 112 ++++++++++-----------
 .../file/metadata/statistics/BinaryStatistics.java |  19 +---
 .../metadata/statistics/BooleanStatistics.java     |  69 +------------
 .../file/metadata/statistics/DoubleStatistics.java |  98 ++----------------
 .../file/metadata/statistics/FloatStatistics.java  |  98 ++----------------
 .../metadata/statistics/IntegerStatistics.java     |  98 ++----------------
 .../file/metadata/statistics/LongStatistics.java   |  98 ++----------------
 .../file/metadata/statistics/MinMaxInfo.java       |  32 ++----
 .../file/metadata/statistics/Statistics.java       |  11 +-
 .../tsfile/read/reader/chunk/ChunkReader.java      |   1 +
 .../iotdb/tsfile/utils/ReadWriteIOUtils.java       |  23 +----
 .../metadata/statistics/DoubleStatisticsTest.java  |  86 +++++++---------
 .../metadata/statistics/FloatStatisticsTest.java   |  86 +++++++---------
 .../metadata/statistics/IntegerStatisticsTest.java |  85 +++++++---------
 .../metadata/statistics/LongStatisticsTest.java    |  86 +++++++---------
 19 files changed, 285 insertions(+), 785 deletions(-)

diff --git a/server/src/main/java/org/apache/iotdb/db/query/aggregation/AggregateResult.java b/server/src/main/java/org/apache/iotdb/db/query/aggregation/AggregateResult.java
index a639f37..e616fbd 100644
--- a/server/src/main/java/org/apache/iotdb/db/query/aggregation/AggregateResult.java
+++ b/server/src/main/java/org/apache/iotdb/db/query/aggregation/AggregateResult.java
@@ -281,9 +281,7 @@ public abstract class AggregateResult {
       case MIN_MAX_FLOAT:
       case MIN_MAX_INT32:
       case MIN_MAX_INT64:
-        if (minMaxInfo != null && minMaxInfo.val.equals(((MinMaxInfo) v).val)) {
-          minMaxInfo.timestamps.addAll(((MinMaxInfo) v).timestamps);
-        } else {
+        if (minMaxInfo == null || !minMaxInfo.val.equals(((MinMaxInfo) v).val)) {
           minMaxInfo = (MinMaxInfo) v;
         }
         break;
diff --git a/server/src/main/java/org/apache/iotdb/db/query/aggregation/impl/MaxValueAggrResult.java b/server/src/main/java/org/apache/iotdb/db/query/aggregation/impl/MaxValueAggrResult.java
index 95ebcd3..6c859ea 100644
--- a/server/src/main/java/org/apache/iotdb/db/query/aggregation/impl/MaxValueAggrResult.java
+++ b/server/src/main/java/org/apache/iotdb/db/query/aggregation/impl/MaxValueAggrResult.java
@@ -30,8 +30,6 @@ import org.apache.iotdb.tsfile.read.common.BatchData;
 import java.io.IOException;
 import java.io.OutputStream;
 import java.nio.ByteBuffer;
-import java.util.HashSet;
-import java.util.Set;
 
 public class MaxValueAggrResult extends AggregateResult {
 
@@ -60,20 +58,17 @@ public class MaxValueAggrResult extends AggregateResult {
   @Override
   public void updateResultFromPageData(BatchData dataInThisPage, long minBound, long maxBound) {
     Comparable<Object> maxVal = null;
-    Set<Long> topTimestamps = new HashSet<>();
+    long topTimestamp = -1;
     while (dataInThisPage.hasCurrent()
         && dataInThisPage.currentTime() < maxBound
         && dataInThisPage.currentTime() >= minBound) {
       if (maxVal == null || maxVal.compareTo(dataInThisPage.currentValue()) < 0) {
         maxVal = (Comparable<Object>) dataInThisPage.currentValue();
-        topTimestamps.clear();
-        topTimestamps.add(dataInThisPage.currentTime());
-      } else if (maxVal.compareTo(dataInThisPage.currentValue()) == 0) {
-        topTimestamps.add(dataInThisPage.currentTime());
+        topTimestamp = dataInThisPage.currentTime();
       }
       dataInThisPage.next();
     }
-    updateResult(new MinMaxInfo<>(maxVal, topTimestamps));
+    updateResult(new MinMaxInfo<>(maxVal, topTimestamp));
   }
 
   /** @author Yuyuan Kang */
@@ -81,32 +76,26 @@ public class MaxValueAggrResult extends AggregateResult {
   public void updateResultUsingTimestamps(
       long[] timestamps, int length, IReaderByTimestamp dataReader) throws IOException {
     Comparable<Object> maxVal = null;
-    Set<Long> topTimestamps = new HashSet<>();
+    long topTimestamp = -1;
     Object[] values = dataReader.getValuesInTimestamps(timestamps, length);
     for (int i = 0; i < length; i++) {
       if (values[i] != null && (maxVal == null || maxVal.compareTo(values[i]) < 0)) {
         maxVal = (Comparable<Object>) values[i];
-        topTimestamps.clear();
-        topTimestamps.add(timestamps[i]);
-      } else if (values[i] != null && maxVal.compareTo(values[i]) == 0) {
-        topTimestamps.add(timestamps[i]);
+        topTimestamp = timestamps[i];
       }
     }
-    updateResult(new MinMaxInfo<>(maxVal, topTimestamps));
+    updateResult(new MinMaxInfo<>(maxVal, topTimestamp));
   }
 
   /** @author Yuyuan Kang */
   @Override
   public void updateResultUsingValues(long[] timestamps, int length, Object[] values) {
     Comparable<Object> maxVal = null;
-    Set<Long> topTimestamps = new HashSet<>();
+    long topTimestamps = -1;
     for (int i = 0; i < length; i++) {
       if (values[i] != null && (maxVal == null || maxVal.compareTo(values[i]) < 0)) {
         maxVal = (Comparable<Object>) values[i];
-        topTimestamps.clear();
-        topTimestamps.add(timestamps[i]);
-      } else if (values[i] != null && maxVal.compareTo(values[i]) == 0) {
-        topTimestamps.add(timestamps[i]);
+        topTimestamps = timestamps[i];
       }
     }
     updateResult(new MinMaxInfo(maxVal, topTimestamps));
diff --git a/server/src/main/java/org/apache/iotdb/db/query/aggregation/impl/MinValueAggrResult.java b/server/src/main/java/org/apache/iotdb/db/query/aggregation/impl/MinValueAggrResult.java
index c29486c..55950ed 100644
--- a/server/src/main/java/org/apache/iotdb/db/query/aggregation/impl/MinValueAggrResult.java
+++ b/server/src/main/java/org/apache/iotdb/db/query/aggregation/impl/MinValueAggrResult.java
@@ -30,8 +30,6 @@ import org.apache.iotdb.tsfile.read.common.BatchData;
 import java.io.IOException;
 import java.io.OutputStream;
 import java.nio.ByteBuffer;
-import java.util.HashSet;
-import java.util.Set;
 
 public class MinValueAggrResult extends AggregateResult {
 
@@ -61,20 +59,17 @@ public class MinValueAggrResult extends AggregateResult {
   @Override
   public void updateResultFromPageData(BatchData dataInThisPage, long minBound, long maxBound) {
     Comparable<Object> minVal = null;
-    Set<Long> bottomTimestamps = new HashSet<>();
+    long bottomTimestamp = -1;
     while (dataInThisPage.hasCurrent()
         && dataInThisPage.currentTime() < maxBound
         && dataInThisPage.currentTime() >= minBound) {
       if (minVal == null || minVal.compareTo(dataInThisPage.currentValue()) > 0) {
         minVal = (Comparable<Object>) dataInThisPage.currentValue();
-        bottomTimestamps.clear();
-        bottomTimestamps.add(dataInThisPage.currentTime());
-      } else if (minVal.compareTo(dataInThisPage.currentValue()) == 0) {
-        bottomTimestamps.add(dataInThisPage.currentTime());
+        bottomTimestamp = dataInThisPage.currentTime();
       }
       dataInThisPage.next();
     }
-    updateResult(new MinMaxInfo<>(minVal, bottomTimestamps));
+    updateResult(new MinMaxInfo<>(minVal, bottomTimestamp));
   }
 
   /** @author Yuyuan Kang */
@@ -82,35 +77,29 @@ public class MinValueAggrResult extends AggregateResult {
   public void updateResultUsingTimestamps(
       long[] timestamps, int length, IReaderByTimestamp dataReader) throws IOException {
     Comparable<Object> minVal = null;
-    Set<Long> bottomTimes = new HashSet<>();
+    long bottomTime = -1;
     Object[] values = dataReader.getValuesInTimestamps(timestamps, length);
     for (int i = 0; i < length; i++) {
       if (values[i] != null && (minVal == null || minVal.compareTo(values[i]) > 0)) {
         minVal = (Comparable<Object>) values[i];
-        bottomTimes.clear();
-        bottomTimes.add(timestamps[i]);
-      } else if (values[i] != null && minVal.compareTo(values[i]) == 0) {
-        bottomTimes.add(timestamps[i]);
+        bottomTime = timestamps[i];
       }
     }
-    updateResult(new MinMaxInfo<>(minVal, bottomTimes));
+    updateResult(new MinMaxInfo<>(minVal, bottomTime));
   }
 
   /** @author Yuyuan Kang */
   @Override
   public void updateResultUsingValues(long[] timestamps, int length, Object[] values) {
     Comparable<Object> minVal = null;
-    Set<Long> bottomTimes = new HashSet<>();
+    long bottomTime = -1;
     for (int i = 0; i < length; i++) {
       if (values[i] != null && (minVal == null || minVal.compareTo(values[i]) > 0)) {
         minVal = (Comparable<Object>) values[i];
-        bottomTimes.clear();
-        bottomTimes.add(timestamps[i]);
-      } else if (values[i] != null && minVal.compareTo(values[i]) == 0) {
-        bottomTimes.add(timestamps[i]);
+        bottomTime = timestamps[i];
       }
     }
-    updateResult(new MinMaxInfo<>(minVal, bottomTimes));
+    updateResult(new MinMaxInfo<>(minVal, bottomTime));
   }
 
   @Override
diff --git a/server/src/test/java/org/apache/iotdb/db/integration/IOTDBGroupByIT.java b/server/src/test/java/org/apache/iotdb/db/integration/IOTDBGroupByIT.java
index f166d0b..77fe75f 100644
--- a/server/src/test/java/org/apache/iotdb/db/integration/IOTDBGroupByIT.java
+++ b/server/src/test/java/org/apache/iotdb/db/integration/IOTDBGroupByIT.java
@@ -619,8 +619,8 @@ public class IOTDBGroupByIT {
   @Test
   public void largeIntervalTest() {
     System.out.println("largeIntervalTest");
-    String[] retArray1 = new String[] {"0,4.4[4],12,300,4", "340,100.1[500, 580],10,620,500"};
-    String[] retArray2 = new String[] {"0,3.3[3],13,300,3", "340,100.1[500, 580],10,620,500"};
+    String[] retArray1 = new String[] {"0,4.4[4],12,300,4", "340,100.1[500],10,620,500"};
+    String[] retArray2 = new String[] {"0,3.3[3],13,300,3", "340,100.1[500],10,620,500"};
 
     try (Connection connection =
             DriverManager.getConnection("jdbc:iotdb://127.0.0.1:6667/", "root", "root");
@@ -678,8 +678,8 @@ public class IOTDBGroupByIT {
         Assert.assertEquals(retArray2.length, cnt);
       }
 
-      retArray1 = new String[] {"0,4.4[4],12,300,4", "340,100.1[580, 500],10,620,500"};
-      retArray2 = new String[] {"0,3.3[3],13,300,3", "340,100.1[580, 500],10,620,500"};
+      retArray1 = new String[] {"0,4.4[4],12,300,4", "340,100.1[580],10,620,500"};
+      retArray2 = new String[] {"0,3.3[3],13,300,3", "340,100.1[580],10,620,500"};
       // order by time desc
       hasResultSet =
           statement.execute(
diff --git a/server/src/test/java/org/apache/iotdb/db/integration/aggregation/IoTDBAggregationLargeDataIT.java b/server/src/test/java/org/apache/iotdb/db/integration/aggregation/IoTDBAggregationLargeDataIT.java
index 787ea92..f5900d8 100644
--- a/server/src/test/java/org/apache/iotdb/db/integration/aggregation/IoTDBAggregationLargeDataIT.java
+++ b/server/src/test/java/org/apache/iotdb/db/integration/aggregation/IoTDBAggregationLargeDataIT.java
@@ -33,10 +33,6 @@ import java.sql.Connection;
 import java.sql.DriverManager;
 import java.sql.ResultSet;
 import java.sql.Statement;
-import java.util.ArrayList;
-import java.util.HashSet;
-import java.util.List;
-import java.util.Set;
 
 import static org.apache.iotdb.db.constant.TestConstant.avg;
 import static org.apache.iotdb.db.constant.TestConstant.count;
@@ -510,60 +506,50 @@ public class IoTDBAggregationLargeDataIT {
     }
   }
 
-  /** @author Yuyuan Kang */
-  private boolean compareArrayString(String s1, String s2) {
-    List<Integer> indexOfLeft = new ArrayList<>();
-    List<Integer> indexOfRight = new ArrayList<>();
-    boolean compare = true;
-    for (int i = 0; i < s1.length(); i++) {
-
-      if (s1.charAt(i) == '[') {
-        indexOfLeft.add(i);
-        compare = false;
-        continue;
-      } else if (s1.charAt(i) == ']') {
-        indexOfRight.add(i);
-        compare = true;
-        continue;
-      }
-      if (compare && s1.charAt(i) != s2.charAt(i)) {
-        return false;
-      }
-    }
-    Assert.assertEquals(indexOfLeft.size(), indexOfRight.size());
-    for (int i = 0; i < indexOfLeft.size(); i++) {
-      String sub1 = s1.substring(indexOfLeft.get(i) + 1, indexOfRight.get(i));
-      String[] vals1 = sub1.split(", ");
-      Set<Integer> set1 = new HashSet<>();
-      for (String s : vals1) {
-        set1.add(Integer.valueOf(s));
-      }
-      String sub2 = s2.substring(indexOfLeft.get(i) + 1, indexOfRight.get(i));
-      String[] vals2 = sub2.split(", ");
-      Set<Integer> set2 = new HashSet<>();
-      for (String s : vals2) {
-        set2.add(Integer.valueOf(s));
-      }
-      if (!set1.equals(set2)) {
-        return false;
-      }
-    }
-    return true;
-  }
+  //  /** @author Yuyuan Kang */
+  //  private boolean compareArrayString(String s1, String s2) {
+  //    List<Integer> indexOfLeft = new ArrayList<>();
+  //    List<Integer> indexOfRight = new ArrayList<>();
+  //    boolean compare = true;
+  //    for (int i = 0; i < s1.length(); i++) {
+  //
+  //      if (s1.charAt(i) == '[') {
+  //        indexOfLeft.add(i);
+  //        compare = false;
+  //        continue;
+  //      } else if (s1.charAt(i) == ']') {
+  //        indexOfRight.add(i);
+  //        compare = true;
+  //        continue;
+  //      }
+  //      if (compare && s1.charAt(i) != s2.charAt(i)) {
+  //        return false;
+  //      }
+  //    }
+  //    Assert.assertEquals(indexOfLeft.size(), indexOfRight.size());
+  //    for (int i = 0; i < indexOfLeft.size(); i++) {
+  //      String sub1 = s1.substring(indexOfLeft.get(i) + 1, indexOfRight.get(i));
+  //      String[] vals1 = sub1.split(", ");
+  //      Set<Integer> set1 = new HashSet<>();
+  //      for (String s : vals1) {
+  //        set1.add(Integer.valueOf(s));
+  //      }
+  //      String sub2 = s2.substring(indexOfLeft.get(i) + 1, indexOfRight.get(i));
+  //      String[] vals2 = sub2.split(", ");
+  //      Set<Integer> set2 = new HashSet<>();
+  //      for (String s : vals2) {
+  //        set2.add(Integer.valueOf(s));
+  //      }
+  //      if (!set1.equals(set2)) {
+  //        return false;
+  //      }
+  //    }
+  //    return true;
+  //  }
 
   /** @author Yuyuan Kang */
   private void minValueAggreWithSingleFilterTest() {
-    String[] retArray =
-        new String[] {
-          "0,"
-              + "0[3920, 3850, 3710],"
-              + "0[3264, 3009, 3587, 3332, 3077, 3468, 3213, 3536, 3920, 3281, 3026, 3349, 3094, "
-              + "3800, 3417, 3162, 3553, 3298, 3043, 3366, 3111, 3880, 3434, 3179, 3502, 3247, 3760,"
-              + " 3383, 3128, 3451, 3196, 3519],"
-              + "0.0[3168, 3234, 3586, 3813, 3014, 3366, 3432, 3146, "
-              + "3498, 3212, 3564, 3278, 3344, 3058, 3124, 3476, 3542, 3256, 3322, 3036, 3388, 3102,"
-              + " 3454]"
-        };
+    String[] retArray = new String[] {"0,0[3710],0[3009],0.0[3014]"};
 
     try (Connection connection =
             DriverManager.getConnection("jdbc:iotdb://127.0.0.1:6667/", "root", "root");
@@ -586,13 +572,16 @@ public class IoTDBAggregationLargeDataIT {
                     + resultSet.getString(min_value(d0s1))
                     + ","
                     + resultSet.getString(min_value(d0s2));
-            Assert.assertEquals(ans, retArray[cnt]);
+            System.out.println(ans);
+            Assert.assertEquals(retArray[cnt], ans);
             cnt++;
           }
           Assert.assertEquals(1, cnt);
         }
       }
 
+      retArray = new String[] {"0,0[3920],0[3920],0.0[3813]"};
+
       hasResultSet =
           statement.execute(
               "select min_value(s0),min_value(s1),min_value(s2)"
@@ -611,7 +600,7 @@ public class IoTDBAggregationLargeDataIT {
                     + resultSet.getString(min_value(d0s1))
                     + ","
                     + resultSet.getString(min_value(d0s2));
-            Assert.assertTrue(compareArrayString(ans, retArray[cnt]));
+            Assert.assertEquals(retArray[cnt], ans);
             //            Assert.assertEquals(ans, retArray[cnt]);
             cnt++;
           }
@@ -626,8 +615,7 @@ public class IoTDBAggregationLargeDataIT {
 
   /** @author Yuyuan Kang */
   private void maxValueAggreWithSingleFilterTest() {
-    String[] retArray =
-        new String[] {"0,99[3299, 3399, 105, 3099, 3499, 3199, 3599],40000[2],122.0[3812, 3935]"};
+    String[] retArray = new String[] {"0,99[105],40000[2],122.0[3812]"};
 
     try (Connection connection =
             DriverManager.getConnection("jdbc:iotdb://127.0.0.1:6667/", "root", "root");
@@ -651,13 +639,15 @@ public class IoTDBAggregationLargeDataIT {
                     + resultSet.getString(max_value(d0s1))
                     + ","
                     + resultSet.getString(max_value(d0s2));
-            Assert.assertEquals(ans, retArray[cnt]);
+            Assert.assertEquals(retArray[cnt], ans);
             cnt++;
           }
           Assert.assertEquals(1, cnt);
         }
       }
 
+      retArray = new String[] {"0,99[3599],40000[2],122.0[3935]"};
+
       hasResultSet =
           statement.execute(
               "select max_value(s0),max_value(s1),max_value(s2)"
@@ -676,7 +666,7 @@ public class IoTDBAggregationLargeDataIT {
                     + resultSet.getString(max_value(d0s1))
                     + ","
                     + resultSet.getString(max_value(d0s2));
-            Assert.assertTrue(compareArrayString(ans, retArray[cnt]));
+            Assert.assertEquals(retArray[cnt], ans);
             cnt++;
           }
           Assert.assertEquals(1, cnt);
diff --git a/tsfile/src/main/java/org/apache/iotdb/tsfile/file/metadata/statistics/BinaryStatistics.java b/tsfile/src/main/java/org/apache/iotdb/tsfile/file/metadata/statistics/BinaryStatistics.java
index e398380..4d15179 100644
--- a/tsfile/src/main/java/org/apache/iotdb/tsfile/file/metadata/statistics/BinaryStatistics.java
+++ b/tsfile/src/main/java/org/apache/iotdb/tsfile/file/metadata/statistics/BinaryStatistics.java
@@ -28,7 +28,6 @@ import java.io.IOException;
 import java.io.InputStream;
 import java.io.OutputStream;
 import java.nio.ByteBuffer;
-import java.util.Set;
 
 /** Statistics for string type. */
 public class BinaryStatistics extends Statistics<Binary> {
@@ -104,14 +103,14 @@ public class BinaryStatistics extends Statistics<Binary> {
 
   /** @author Yuyuan Kang */
   @Override
-  public Set<Long> getBottomTimestamps() {
+  public long getBottomTimestamp() {
     throw new StatisticsClassException(
         String.format(OPERATION_NOT_SUPPORT_FORMAT, "Binary", "min"));
   }
 
   /** @author Yuyuan Kang */
   @Override
-  public Set<Long> getTopTimestamps() {
+  public long getTopTimestamp() {
     throw new StatisticsClassException(
         String.format(OPERATION_NOT_SUPPORT_FORMAT, "Binary", "max"));
   }
@@ -164,25 +163,11 @@ public class BinaryStatistics extends Statistics<Binary> {
 
   /** @author Yuyuan Kang */
   @Override
-  public void updateMinInfo(Binary val, Set<Long> timestamps) {
-    throw new StatisticsClassException(
-        String.format(OPERATION_NOT_SUPPORT_FORMAT, "Binary", "min"));
-  }
-
-  /** @author Yuyuan Kang */
-  @Override
   public void updateMaxInfo(Binary val, long timestamp) {
     throw new StatisticsClassException(
         String.format(OPERATION_NOT_SUPPORT_FORMAT, "Binary", "max"));
   }
 
-  /** @author Yuyuan Kang */
-  @Override
-  public void updateMaxInfo(Binary val, Set<Long> timestamps) {
-    throw new StatisticsClassException(
-        String.format(OPERATION_NOT_SUPPORT_FORMAT, "Binary", "max"));
-  }
-
   @Override
   void updateStats(Binary value) {
     if (isEmpty) {
diff --git a/tsfile/src/main/java/org/apache/iotdb/tsfile/file/metadata/statistics/BooleanStatistics.java b/tsfile/src/main/java/org/apache/iotdb/tsfile/file/metadata/statistics/BooleanStatistics.java
index 9600b80..b751175 100644
--- a/tsfile/src/main/java/org/apache/iotdb/tsfile/file/metadata/statistics/BooleanStatistics.java
+++ b/tsfile/src/main/java/org/apache/iotdb/tsfile/file/metadata/statistics/BooleanStatistics.java
@@ -26,7 +26,6 @@ import java.io.IOException;
 import java.io.InputStream;
 import java.io.OutputStream;
 import java.nio.ByteBuffer;
-import java.util.Set;
 
 public class BooleanStatistics extends Statistics<Boolean> {
 
@@ -131,14 +130,14 @@ public class BooleanStatistics extends Statistics<Boolean> {
 
   /** @author Yuyuan Kang */
   @Override
-  public Set<Long> getBottomTimestamps() {
+  public long getBottomTimestamp() {
     throw new StatisticsClassException(
         String.format(OPERATION_NOT_SUPPORT_FORMAT, "Boolean", "min"));
   }
 
   /** @author Yuyuan Kang */
   @Override
-  public Set<Long> getTopTimestamps() {
+  public long getTopTimestamp() {
     throw new StatisticsClassException(
         String.format(OPERATION_NOT_SUPPORT_FORMAT, "Boolean", "max"));
   }
@@ -165,31 +164,6 @@ public class BooleanStatistics extends Statistics<Boolean> {
     return sumValue;
   }
 
-  //  @Override
-  //  public ByteBuffer getMinValueBuffer() {
-  //    throw new StatisticsClassException("Boolean statistics do not support: min");
-  //  }
-
-  //  @Override
-  //  public ByteBuffer getMaxValueBuffer() {
-  //    throw new StatisticsClassException("Boolean statistics do not support: max");
-  //  }
-  //
-  //  @Override
-  //  public ByteBuffer getFirstValueBuffer() {
-  //    return ReadWriteIOUtils.getByteBuffer(firstValue);
-  //  }
-  //
-  //  @Override
-  //  public ByteBuffer getLastValueBuffer() {
-  //    return ReadWriteIOUtils.getByteBuffer(lastValue);
-  //  }
-  //
-  //  @Override
-  //  public ByteBuffer getSumValueBuffer() {
-  //    return ReadWriteIOUtils.getByteBuffer(sumValue);
-  //  }
-
   @Override
   protected void mergeStatisticsValue(Statistics stats) {
     BooleanStatistics boolStats = (BooleanStatistics) stats;
@@ -215,50 +189,11 @@ public class BooleanStatistics extends Statistics<Boolean> {
 
   /** @author Yuyuan Kang */
   @Override
-  public void updateMinInfo(Boolean val, Set<Long> timestamps) {
-    throw new StatisticsClassException(
-        String.format(OPERATION_NOT_SUPPORT_FORMAT, "Boolean", "min"));
-  }
-
-  /** @author Yuyuan Kang */
-  @Override
   public void updateMaxInfo(Boolean val, long timestamp) {
     throw new StatisticsClassException(
         String.format(OPERATION_NOT_SUPPORT_FORMAT, "Boolean", "max"));
   }
 
-  /** @author Yuyuan Kang */
-  @Override
-  public void updateMaxInfo(Boolean val, Set<Long> timestamps) {
-    throw new StatisticsClassException(
-        String.format(OPERATION_NOT_SUPPORT_FORMAT, "Boolean", "max"));
-  }
-
-  //  @Override
-  //  public byte[] getMinInfoBytes() {
-  //    throw new StatisticsClassException("Boolean statistics does not support: min");
-  //  }
-  //
-  //  @Override
-  //  public byte[] getMaxInfoBytes() {
-  //    throw new StatisticsClassException("Boolean statistics does not support: max");
-  //  }
-  //
-  //  @Override
-  //  public byte[] getFirstValueBytes() {
-  //    return BytesUtils.boolToBytes(firstValue);
-  //  }
-  //
-  //  @Override
-  //  public byte[] getLastValueBytes() {
-  //    return BytesUtils.boolToBytes(lastValue);
-  //  }
-  //
-  //  @Override
-  //  public byte[] getSumValueBytes() {
-  //    return BytesUtils.longToBytes(sumValue);
-  //  }
-
   @Override
   public int serializeStats(OutputStream outputStream) throws IOException {
     int byteLen = 0;
diff --git a/tsfile/src/main/java/org/apache/iotdb/tsfile/file/metadata/statistics/DoubleStatistics.java b/tsfile/src/main/java/org/apache/iotdb/tsfile/file/metadata/statistics/DoubleStatistics.java
index ccc08f2..48b7722 100644
--- a/tsfile/src/main/java/org/apache/iotdb/tsfile/file/metadata/statistics/DoubleStatistics.java
+++ b/tsfile/src/main/java/org/apache/iotdb/tsfile/file/metadata/statistics/DoubleStatistics.java
@@ -26,8 +26,6 @@ import java.io.IOException;
 import java.io.InputStream;
 import java.io.OutputStream;
 import java.nio.ByteBuffer;
-import java.util.HashSet;
-import java.util.Set;
 
 public class DoubleStatistics extends Statistics<Double> {
 
@@ -44,8 +42,8 @@ public class DoubleStatistics extends Statistics<Double> {
 
   /** @author Yuyuan Kang */
   public DoubleStatistics() {
-    this.minInfo = new MinMaxInfo<>(Double.MAX_VALUE, new HashSet<>());
-    this.maxInfo = new MinMaxInfo<>(Double.MIN_VALUE, new HashSet<>());
+    this.minInfo = new MinMaxInfo<>(Double.MAX_VALUE, -1);
+    this.maxInfo = new MinMaxInfo<>(Double.MIN_VALUE, -1);
   }
 
   @Override
@@ -58,12 +56,10 @@ public class DoubleStatistics extends Statistics<Double> {
     int len = 0;
     // min info
     len += 8; // value of min info, double
-    len += 4; //  size of bottom timestamps, int
-    len += 8 * minInfo.timestamps.size(); // timestamps of min info, double(s)
+    len += 8; // timestamps of min info, long
     // max info
     len += 8; // value of max info, double
-    len += 4; // size of top timestamps, int
-    len += 8 * maxInfo.timestamps.size(); // timestamps of max info, double(s)
+    len += 8; // timestamps of max info, long
     len += 24; // first value, last value and sum value
     return len;
   }
@@ -103,18 +99,6 @@ public class DoubleStatistics extends Statistics<Double> {
   public void updateMinInfo(Double val, long timestamp) {
     if (val < this.minInfo.val) {
       this.minInfo.reset(val, timestamp);
-    } else if (val.equals(this.minInfo.val)) {
-      this.minInfo.timestamps.add(timestamp);
-    }
-  }
-
-  /** @author Yuyuan Kang */
-  @Override
-  public void updateMinInfo(Double val, Set<Long> timestamps) {
-    if (val < this.minInfo.val) {
-      this.minInfo.reset(val, timestamps);
-    } else if (val.equals(this.minInfo.val)) {
-      this.minInfo.timestamps.addAll(timestamps);
     }
   }
 
@@ -123,18 +107,6 @@ public class DoubleStatistics extends Statistics<Double> {
   public void updateMaxInfo(Double val, long timestamp) {
     if (val > this.maxInfo.val) {
       this.maxInfo.reset(val, timestamp);
-    } else if (val.equals(this.maxInfo.val)) {
-      this.maxInfo.timestamps.add(timestamp);
-    }
-  }
-
-  /** @author Yuyuan Kang */
-  @Override
-  public void updateMaxInfo(Double val, Set<Long> timestamps) {
-    if (val > this.maxInfo.val) {
-      this.maxInfo.reset(val, timestamps);
-    } else if (val.equals(this.maxInfo.val)) {
-      this.maxInfo.timestamps.addAll(timestamps);
     }
   }
 
@@ -161,8 +133,8 @@ public class DoubleStatistics extends Statistics<Double> {
       double sumValue,
       long startTime,
       long endTime) {
-    updateMinInfo(minInfo.val, minInfo.timestamps);
-    updateMaxInfo(maxInfo.val, maxInfo.timestamps);
+    updateMinInfo(minInfo.val, minInfo.timestamp);
+    updateMaxInfo(maxInfo.val, maxInfo.timestamp);
     this.sumValue += sumValue;
     // only if endTime greater or equals to the current endTime need we update the last value
     // only if startTime less or equals to the current startTime need we update the first value
@@ -231,14 +203,14 @@ public class DoubleStatistics extends Statistics<Double> {
 
   /** @author Yuyuan Kang */
   @Override
-  public Set<Long> getBottomTimestamps() {
-    return this.minInfo.timestamps;
+  public long getBottomTimestamp() {
+    return this.minInfo.timestamp;
   }
 
   /** @author Yuyuan Kang */
   @Override
-  public Set<Long> getTopTimestamps() {
-    return this.maxInfo.timestamps;
+  public long getTopTimestamp() {
+    return this.maxInfo.timestamp;
   }
 
   @Override
@@ -285,56 +257,6 @@ public class DoubleStatistics extends Statistics<Double> {
     }
   }
 
-  //  @Override
-  //  public byte[] getMinInfoBytes() {
-  //    return BytesUtils.doubleToBytes(minValue);
-  //  }
-  //
-  //  @Override
-  //  public byte[] getMaxInfoBytes() {
-  //    return BytesUtils.doubleToBytes(maxValue);
-  //  }
-  //
-  //  @Override
-  //  public byte[] getFirstValueBytes() {
-  //    return BytesUtils.doubleToBytes(firstValue);
-  //  }
-  //
-  //  @Override
-  //  public byte[] getLastValueBytes() {
-  //    return BytesUtils.doubleToBytes(lastValue);
-  //  }
-  //
-  //  @Override
-  //  public byte[] getSumValueBytes() {
-  //    return BytesUtils.doubleToBytes(sumValue);
-  //  }
-  //
-  //  @Override
-  //  public ByteBuffer getMinValueBuffer() {
-  //    return ReadWriteIOUtils.getByteBuffer(minValue);
-  //  }
-  //
-  //  @Override
-  //  public ByteBuffer getMaxValueBuffer() {
-  //    return ReadWriteIOUtils.getByteBuffer(maxValue);
-  //  }
-  //
-  //  @Override
-  //  public ByteBuffer getFirstValueBuffer() {
-  //    return ReadWriteIOUtils.getByteBuffer(firstValue);
-  //  }
-  //
-  //  @Override
-  //  public ByteBuffer getLastValueBuffer() {
-  //    return ReadWriteIOUtils.getByteBuffer(lastValue);
-  //  }
-  //
-  //  @Override
-  //  public ByteBuffer getSumValueBuffer() {
-  //    return ReadWriteIOUtils.getByteBuffer(sumValue);
-  //  }
-
   /** @author Yuyuan Kang */
   @Override
   public int serializeStats(OutputStream outputStream) throws IOException {
diff --git a/tsfile/src/main/java/org/apache/iotdb/tsfile/file/metadata/statistics/FloatStatistics.java b/tsfile/src/main/java/org/apache/iotdb/tsfile/file/metadata/statistics/FloatStatistics.java
index c999936..d084152 100644
--- a/tsfile/src/main/java/org/apache/iotdb/tsfile/file/metadata/statistics/FloatStatistics.java
+++ b/tsfile/src/main/java/org/apache/iotdb/tsfile/file/metadata/statistics/FloatStatistics.java
@@ -26,8 +26,6 @@ import java.io.IOException;
 import java.io.InputStream;
 import java.io.OutputStream;
 import java.nio.ByteBuffer;
-import java.util.HashSet;
-import java.util.Set;
 
 /** Statistics for float type. */
 public class FloatStatistics extends Statistics<Float> {
@@ -45,8 +43,8 @@ public class FloatStatistics extends Statistics<Float> {
 
   /** @author Yuyuan Kang */
   public FloatStatistics() {
-    minInfo = new MinMaxInfo<>(Float.MAX_VALUE, new HashSet<>());
-    maxInfo = new MinMaxInfo<>(Float.MIN_VALUE, new HashSet<>());
+    minInfo = new MinMaxInfo<>(Float.MAX_VALUE, -1);
+    maxInfo = new MinMaxInfo<>(Float.MIN_VALUE, -1);
   }
 
   @Override
@@ -60,12 +58,10 @@ public class FloatStatistics extends Statistics<Float> {
     int len = 0;
     // min info
     len += 8; // value of min info, float
-    len += 4; //  size of bottom timestamps, int
-    len += 8 * minInfo.timestamps.size(); // timestamps of min info, float(s)
+    len += 8; // timestamps of min info, long
     // max info
     len += 8; // value of max info, float
-    len += 4; // size of top timestamps, int
-    len += 8 * maxInfo.timestamps.size(); // timestamps of max info, float(s)
+    len += 8; // timestamps of max info, long
     len += 24; // first value, last value and sum value
     return len;
   }
@@ -75,18 +71,6 @@ public class FloatStatistics extends Statistics<Float> {
   public void updateMinInfo(Float val, long timestamp) {
     if (val < this.minInfo.val) {
       this.minInfo.reset(val, timestamp);
-    } else if (val.equals(this.minInfo.val)) {
-      this.minInfo.timestamps.add(timestamp);
-    }
-  }
-
-  /** @author Yuyuan Kang */
-  @Override
-  public void updateMinInfo(Float val, Set<Long> timestamps) {
-    if (val < this.minInfo.val) {
-      this.minInfo.reset(val, timestamps);
-    } else if (val.equals(this.minInfo.val)) {
-      this.minInfo.timestamps.addAll(timestamps);
     }
   }
 
@@ -95,18 +79,6 @@ public class FloatStatistics extends Statistics<Float> {
   public void updateMaxInfo(Float val, long timestamp) {
     if (val > this.maxInfo.val) {
       this.maxInfo.reset(val, timestamp);
-    } else if (val.equals(this.maxInfo.val)) {
-      this.maxInfo.timestamps.add(timestamp);
-    }
-  }
-
-  /** @author Yuyuan Kang */
-  @Override
-  public void updateMaxInfo(Float val, Set<Long> timestamps) {
-    if (val > this.maxInfo.val) {
-      this.maxInfo.reset(val, timestamps);
-    } else if (val.equals(this.maxInfo.val)) {
-      this.maxInfo.timestamps.addAll(timestamps);
     }
   }
 
@@ -163,8 +135,8 @@ public class FloatStatistics extends Statistics<Float> {
       double sumValue,
       long startTime,
       long endTime) {
-    updateMinInfo(minInfo.val, minInfo.timestamps);
-    updateMaxInfo(maxInfo.val, maxInfo.timestamps);
+    updateMinInfo(minInfo.val, minInfo.timestamp);
+    updateMaxInfo(maxInfo.val, maxInfo.timestamp);
     this.sumValue += sumValue;
     // only if endTime greater or equals to the current endTime need we update the last value
     // only if startTime less or equals to the current startTime need we update the first value
@@ -233,14 +205,14 @@ public class FloatStatistics extends Statistics<Float> {
 
   /** @author Yuyuan Kang */
   @Override
-  public Set<Long> getBottomTimestamps() {
-    return this.minInfo.timestamps;
+  public long getBottomTimestamp() {
+    return this.minInfo.timestamp;
   }
 
   /** @author Yuyuan Kang */
   @Override
-  public Set<Long> getTopTimestamps() {
-    return this.maxInfo.timestamps;
+  public long getTopTimestamp() {
+    return this.maxInfo.timestamp;
   }
 
   @Override
@@ -287,56 +259,6 @@ public class FloatStatistics extends Statistics<Float> {
     }
   }
 
-  //  @Override
-  //  public byte[] getMinInfoBytes() {
-  //    return BytesUtils.floatToBytes(minValue);
-  //  }
-  //
-  //  @Override
-  //  public byte[] getMaxInfoBytes() {
-  //    return BytesUtils.floatToBytes(maxValue);
-  //  }
-  //
-  //  @Override
-  //  public byte[] getFirstValueBytes() {
-  //    return BytesUtils.floatToBytes(firstValue);
-  //  }
-  //
-  //  @Override
-  //  public byte[] getLastValueBytes() {
-  //    return BytesUtils.floatToBytes(lastValue);
-  //  }
-  //
-  //  @Override
-  //  public byte[] getSumValueBytes() {
-  //    return BytesUtils.doubleToBytes(sumValue);
-  //  }
-  //
-  //  @Override
-  //  public ByteBuffer getMinValueBuffer() {
-  //    return ReadWriteIOUtils.getByteBuffer(minValue);
-  //  }
-  //
-  //  @Override
-  //  public ByteBuffer getMaxValueBuffer() {
-  //    return ReadWriteIOUtils.getByteBuffer(maxValue);
-  //  }
-  //
-  //  @Override
-  //  public ByteBuffer getFirstValueBuffer() {
-  //    return ReadWriteIOUtils.getByteBuffer(firstValue);
-  //  }
-  //
-  //  @Override
-  //  public ByteBuffer getLastValueBuffer() {
-  //    return ReadWriteIOUtils.getByteBuffer(lastValue);
-  //  }
-  //
-  //  @Override
-  //  public ByteBuffer getSumValueBuffer() {
-  //    return ReadWriteIOUtils.getByteBuffer(sumValue);
-  //  }
-
   /** @author Yuyuan Kang */
   @Override
   public int serializeStats(OutputStream outputStream) throws IOException {
diff --git a/tsfile/src/main/java/org/apache/iotdb/tsfile/file/metadata/statistics/IntegerStatistics.java b/tsfile/src/main/java/org/apache/iotdb/tsfile/file/metadata/statistics/IntegerStatistics.java
index 993103d..6ee9cbf 100644
--- a/tsfile/src/main/java/org/apache/iotdb/tsfile/file/metadata/statistics/IntegerStatistics.java
+++ b/tsfile/src/main/java/org/apache/iotdb/tsfile/file/metadata/statistics/IntegerStatistics.java
@@ -26,8 +26,6 @@ import java.io.IOException;
 import java.io.InputStream;
 import java.io.OutputStream;
 import java.nio.ByteBuffer;
-import java.util.HashSet;
-import java.util.Set;
 
 /** Statistics for int type. */
 public class IntegerStatistics extends Statistics<Integer> {
@@ -51,8 +49,8 @@ public class IntegerStatistics extends Statistics<Integer> {
 
   /** @author Yuyuan Kang */
   public IntegerStatistics() {
-    minInfo = new MinMaxInfo<>(Integer.MAX_VALUE, new HashSet<>());
-    maxInfo = new MinMaxInfo<>(Integer.MIN_VALUE, new HashSet<>());
+    minInfo = new MinMaxInfo<>(Integer.MAX_VALUE, -1);
+    maxInfo = new MinMaxInfo<>(Integer.MIN_VALUE, -1);
   }
 
   /** @author Yuyuan Kang */
@@ -61,12 +59,10 @@ public class IntegerStatistics extends Statistics<Integer> {
     int len = 0;
     // min info
     len += 4; // value of min info, int
-    len += 4; //  size of bottom timestamps, int
-    len += 4 * minInfo.timestamps.size(); // timestamps of min info, int(s)
+    len += 8; // timestamps of min info, long
     // max info
     len += 4; // value of max info, int
-    len += 4; // size of top timestamps, int
-    len += 4 * maxInfo.timestamps.size(); // timestamps of max info, int(s)
+    len += 8; // timestamps of max info, long
     len += 16; // first value, last value and sum value
     return len;
   }
@@ -124,8 +120,8 @@ public class IntegerStatistics extends Statistics<Integer> {
       long sumValue,
       long startTime,
       long endTime) {
-    updateMinInfo(minInfo.val, minInfo.timestamps);
-    updateMaxInfo(maxInfo.val, maxInfo.timestamps);
+    updateMinInfo(minInfo.val, minInfo.timestamp);
+    updateMaxInfo(maxInfo.val, maxInfo.timestamp);
     this.sumValue += sumValue;
     // only if endTime greater or equals to the current endTime need we update the last value
     // only if startTime less or equals to the current startTime need we update the first value
@@ -194,14 +190,14 @@ public class IntegerStatistics extends Statistics<Integer> {
 
   /** @author Yuyuan Kang */
   @Override
-  public Set<Long> getBottomTimestamps() {
-    return this.minInfo.timestamps;
+  public long getBottomTimestamp() {
+    return this.minInfo.timestamp;
   }
 
   /** @author Yuyuan Kang */
   @Override
-  public Set<Long> getTopTimestamps() {
-    return this.maxInfo.timestamps;
+  public long getTopTimestamp() {
+    return this.maxInfo.timestamp;
   }
 
   @Override
@@ -253,18 +249,6 @@ public class IntegerStatistics extends Statistics<Integer> {
   public void updateMinInfo(Integer val, long timestamp) {
     if (val < this.minInfo.val) {
       this.minInfo.reset(val, timestamp);
-    } else if (val.equals(this.minInfo.val)) {
-      this.minInfo.timestamps.add(timestamp);
-    }
-  }
-
-  /** @author Yuyuan Kang */
-  @Override
-  public void updateMinInfo(Integer val, Set<Long> timestamps) {
-    if (val < this.minInfo.val) {
-      this.minInfo.reset(val, timestamps);
-    } else if (val.equals(this.minInfo.val)) {
-      this.minInfo.timestamps.addAll(timestamps);
     }
   }
 
@@ -273,73 +257,11 @@ public class IntegerStatistics extends Statistics<Integer> {
   public void updateMaxInfo(Integer val, long timestamp) {
     if (val > this.maxInfo.val) {
       this.maxInfo.reset(val, timestamp);
-    } else if (val.equals(this.maxInfo.val)) {
-      this.maxInfo.timestamps.add(timestamp);
     }
   }
 
   /** @author Yuyuan Kang */
   @Override
-  public void updateMaxInfo(Integer val, Set<Long> timestamps) {
-    if (val > this.maxInfo.val) {
-      this.maxInfo.reset(val, timestamps);
-    } else if (val.equals(this.maxInfo.val)) {
-      this.maxInfo.timestamps.addAll(timestamps);
-    }
-  }
-
-  //  @Override
-  //  public ByteBuffer getMinValueBuffer() {
-  //    return ReadWriteIOUtils.getByteBuffer(minValue);
-  //  }
-  //
-  //  @Override
-  //  public ByteBuffer getMaxValueBuffer() {
-  //    return ReadWriteIOUtils.getByteBuffer(maxValue);
-  //  }
-  //
-  //  @Override
-  //  public ByteBuffer getFirstValueBuffer() {
-  //    return ReadWriteIOUtils.getByteBuffer(firstValue);
-  //  }
-  //
-  //  @Override
-  //  public ByteBuffer getLastValueBuffer() {
-  //    return ReadWriteIOUtils.getByteBuffer(lastValue);
-  //  }
-  //
-  //  @Override
-  //  public ByteBuffer getSumValueBuffer() {
-  //    return ReadWriteIOUtils.getByteBuffer(sumValue);
-  //  }
-  //
-  //  @Override
-  //  public byte[] getMinInfoBytes() {
-  //    return BytesUtils.intToBytes(minValue);
-  //  }
-  //
-  //  @Override
-  //  public byte[] getMaxInfoBytes() {
-  //    return BytesUtils.intToBytes(maxValue);
-  //  }
-  //
-  //  @Override
-  //  public byte[] getFirstValueBytes() {
-  //    return BytesUtils.intToBytes(firstValue);
-  //  }
-  //
-  //  @Override
-  //  public byte[] getLastValueBytes() {
-  //    return BytesUtils.intToBytes(lastValue);
-  //  }
-  //
-  //  @Override
-  //  public byte[] getSumValueBytes() {
-  //    return BytesUtils.longToBytes(sumValue);
-  //  }
-
-  /** @author Yuyuan Kang */
-  @Override
   public int serializeStats(OutputStream outputStream) throws IOException {
     int byteLen = 0;
     byteLen += ReadWriteIOUtils.write(minInfo, minMaxDataType, outputStream);
diff --git a/tsfile/src/main/java/org/apache/iotdb/tsfile/file/metadata/statistics/LongStatistics.java b/tsfile/src/main/java/org/apache/iotdb/tsfile/file/metadata/statistics/LongStatistics.java
index 9c36702..e21949f 100644
--- a/tsfile/src/main/java/org/apache/iotdb/tsfile/file/metadata/statistics/LongStatistics.java
+++ b/tsfile/src/main/java/org/apache/iotdb/tsfile/file/metadata/statistics/LongStatistics.java
@@ -26,8 +26,6 @@ import java.io.IOException;
 import java.io.InputStream;
 import java.io.OutputStream;
 import java.nio.ByteBuffer;
-import java.util.HashSet;
-import java.util.Set;
 
 public class LongStatistics extends Statistics<Long> {
 
@@ -49,8 +47,8 @@ public class LongStatistics extends Statistics<Long> {
 
   /** @author Yuyuan Kang */
   public LongStatistics() {
-    this.minInfo = new MinMaxInfo<>(Long.MAX_VALUE, new HashSet<>());
-    this.maxInfo = new MinMaxInfo<>(Long.MIN_VALUE, new HashSet<>());
+    this.minInfo = new MinMaxInfo<>(Long.MAX_VALUE, -1);
+    this.maxInfo = new MinMaxInfo<>(Long.MIN_VALUE, -1);
   }
 
   /** @author Yuyuan Kang */
@@ -59,12 +57,10 @@ public class LongStatistics extends Statistics<Long> {
     int len = 0;
     // min info
     len += 8; // value of min info, long
-    len += 4; //  size of bottom timestamps, int
-    len += 8 * minInfo.timestamps.size(); // timestamps of min info, long(s)
+    len += 8; // timestamps of min info, long
     // max info
     len += 8; // value of max info, long
-    len += 4; // size of top timestamps, int
-    len += 8 * maxInfo.timestamps.size(); // timestamps of max info, long(s)
+    len += 8; // timestamps of max info, long
     len += 24; // first value, last value and sum value
     return len;
   }
@@ -118,8 +114,8 @@ public class LongStatistics extends Statistics<Long> {
       double sumValue,
       long startTime,
       long endTime) {
-    updateMinInfo(minInfo.val, minInfo.timestamps);
-    updateMaxInfo(maxInfo.val, maxInfo.timestamps);
+    updateMinInfo(minInfo.val, minInfo.timestamp);
+    updateMaxInfo(maxInfo.val, maxInfo.timestamp);
     this.sumValue += sumValue;
     // only if endTime greater or equals to the current endTime need we update the last value
     // only if startTime less or equals to the current startTime need we update the first value
@@ -164,14 +160,14 @@ public class LongStatistics extends Statistics<Long> {
 
   /** @author Yuyuan Kang */
   @Override
-  public Set<Long> getBottomTimestamps() {
-    return this.minInfo.timestamps;
+  public long getBottomTimestamp() {
+    return this.minInfo.timestamp;
   }
 
   /** @author Yuyuan Kang */
   @Override
-  public Set<Long> getTopTimestamps() {
-    return this.maxInfo.timestamps;
+  public long getTopTimestamp() {
+    return this.maxInfo.timestamp;
   }
 
   @Override
@@ -254,18 +250,6 @@ public class LongStatistics extends Statistics<Long> {
   public void updateMinInfo(Long val, long timestamp) {
     if (val < this.minInfo.val) {
       this.minInfo.reset(val, timestamp);
-    } else if (val.equals(this.minInfo.val)) {
-      this.minInfo.timestamps.add(timestamp);
-    }
-  }
-
-  /** @author Yuyuan Kang */
-  @Override
-  public void updateMinInfo(Long val, Set<Long> timestamps) {
-    if (val < this.minInfo.val) {
-      this.minInfo.reset(val, timestamps);
-    } else if (val.equals(this.minInfo.val)) {
-      this.minInfo.timestamps.addAll(timestamps);
     }
   }
 
@@ -274,73 +258,11 @@ public class LongStatistics extends Statistics<Long> {
   public void updateMaxInfo(Long val, long timestamp) {
     if (val > this.maxInfo.val) {
       this.maxInfo.reset(val, timestamp);
-    } else if (val.equals(this.maxInfo.val)) {
-      this.maxInfo.timestamps.add(timestamp);
     }
   }
 
   /** @author Yuyuan Kang */
   @Override
-  public void updateMaxInfo(Long val, Set<Long> timestamps) {
-    if (val > this.maxInfo.val) {
-      this.maxInfo.reset(val, timestamps);
-    } else if (val.equals(this.maxInfo.val)) {
-      this.maxInfo.timestamps.addAll(timestamps);
-    }
-  }
-
-  //  @Override
-  //  public byte[] getMinInfoBytes() {
-  //    return BytesUtils.longToBytes(minValue);
-  //  }
-  //
-  //  @Override
-  //  public byte[] getMaxInfoBytes() {
-  //    return BytesUtils.longToBytes(maxValue);
-  //  }
-  //
-  //  @Override
-  //  public byte[] getFirstValueBytes() {
-  //    return BytesUtils.longToBytes(firstValue);
-  //  }
-  //
-  //  @Override
-  //  public byte[] getLastValueBytes() {
-  //    return BytesUtils.longToBytes(lastValue);
-  //  }
-  //
-  //  @Override
-  //  public byte[] getSumValueBytes() {
-  //    return BytesUtils.doubleToBytes(sumValue);
-  //  }
-  //
-  //  @Override
-  //  public ByteBuffer getMinValueBuffer() {
-  //    return ReadWriteIOUtils.getByteBuffer(minValue);
-  //  }
-  //
-  //  @Override
-  //  public ByteBuffer getMaxValueBuffer() {
-  //    return ReadWriteIOUtils.getByteBuffer(maxValue);
-  //  }
-  //
-  //  @Override
-  //  public ByteBuffer getFirstValueBuffer() {
-  //    return ReadWriteIOUtils.getByteBuffer(firstValue);
-  //  }
-  //
-  //  @Override
-  //  public ByteBuffer getLastValueBuffer() {
-  //    return ReadWriteIOUtils.getByteBuffer(lastValue);
-  //  }
-  //
-  //  @Override
-  //  public ByteBuffer getSumValueBuffer() {
-  //    return ReadWriteIOUtils.getByteBuffer(sumValue);
-  //  }
-
-  /** @author Yuyuan Kang */
-  @Override
   public int serializeStats(OutputStream outputStream) throws IOException {
     int byteLen = 0;
     byteLen += ReadWriteIOUtils.write(minInfo, minMaxDataType, outputStream);
diff --git a/tsfile/src/main/java/org/apache/iotdb/tsfile/file/metadata/statistics/MinMaxInfo.java b/tsfile/src/main/java/org/apache/iotdb/tsfile/file/metadata/statistics/MinMaxInfo.java
index 28ad5ca..d8da22f 100644
--- a/tsfile/src/main/java/org/apache/iotdb/tsfile/file/metadata/statistics/MinMaxInfo.java
+++ b/tsfile/src/main/java/org/apache/iotdb/tsfile/file/metadata/statistics/MinMaxInfo.java
@@ -18,15 +18,11 @@
  */
 package org.apache.iotdb.tsfile.file.metadata.statistics;
 
-import java.util.Arrays;
-import java.util.HashSet;
-import java.util.Set;
-
 /** @author Yuyuan Kang */
 public class MinMaxInfo<K> implements Comparable {
 
   public K val;
-  public Set<Long> timestamps;
+  public Long timestamp;
 
   //  public MinMaxInfo(T val, Set<Long> timestamps) {
   //    this.val = val;
@@ -37,45 +33,29 @@ public class MinMaxInfo<K> implements Comparable {
 
   public MinMaxInfo(K val, long timestamp) {
     this.val = val;
-    this.timestamps = new HashSet<>();
-    this.timestamps.add(timestamp);
+    this.timestamp = timestamp;
   }
 
   public MinMaxInfo(MinMaxInfo<K> minMaxInfo) {
     this.val = minMaxInfo.val;
-    this.timestamps = new HashSet<>();
-    timestamps.addAll(minMaxInfo.timestamps);
-  }
-
-  public MinMaxInfo(K val, Set<Long> timestamps) {
-    this.val = val;
-    this.timestamps = timestamps;
+    this.timestamp = minMaxInfo.timestamp;
   }
 
   public void reset(K val, long timestamp) {
     this.val = val;
-    this.timestamps.clear();
-    this.timestamps.add(timestamp);
-  }
-
-  public void reset(K val, Set<Long> timestamps) {
-    this.val = val;
-    this.timestamps.clear();
-    this.timestamps.addAll(timestamps);
+    this.timestamp = timestamp;
   }
 
   @Override
   public String toString() {
-    String ret = val.toString();
-    ret += Arrays.toString(timestamps.toArray());
-    return ret;
+    return val.toString() + "[" + timestamp + "]";
   }
 
   @Override
   public boolean equals(Object minMaxInfo) {
     if (minMaxInfo.getClass() == this.getClass()) {
       return this.val.equals(((MinMaxInfo<K>) minMaxInfo).val)
-          && this.timestamps.equals(((MinMaxInfo<K>) minMaxInfo).timestamps);
+          && this.timestamp.equals(((MinMaxInfo<K>) minMaxInfo).timestamp);
     } else {
       return false;
     }
diff --git a/tsfile/src/main/java/org/apache/iotdb/tsfile/file/metadata/statistics/Statistics.java b/tsfile/src/main/java/org/apache/iotdb/tsfile/file/metadata/statistics/Statistics.java
index 564b0a4..947805c 100644
--- a/tsfile/src/main/java/org/apache/iotdb/tsfile/file/metadata/statistics/Statistics.java
+++ b/tsfile/src/main/java/org/apache/iotdb/tsfile/file/metadata/statistics/Statistics.java
@@ -33,7 +33,6 @@ import java.io.InputStream;
 import java.io.OutputStream;
 import java.nio.ByteBuffer;
 import java.util.Objects;
-import java.util.Set;
 
 /**
  * This class is used for recording statistic information of each measurement in a delta file. While
@@ -145,10 +144,10 @@ public abstract class Statistics<T> {
   public abstract T getMaxValue();
 
   /** @author Yuyuan Kang */
-  public abstract Set<Long> getBottomTimestamps();
+  public abstract long getBottomTimestamp();
 
   /** @author Yuyuan Kang */
-  public abstract Set<Long> getTopTimestamps();
+  public abstract long getTopTimestamp();
 
   public abstract T getFirstValue();
 
@@ -358,14 +357,8 @@ public abstract class Statistics<T> {
   public abstract void updateMinInfo(T val, long timestamp);
 
   /** @author Yuyuan Kang */
-  public abstract void updateMinInfo(T val, Set<Long> timestamps);
-
-  /** @author Yuyuan Kang */
   public abstract void updateMaxInfo(T val, long timestamp);
 
-  /** @author Yuyuan Kang */
-  public abstract void updateMaxInfo(T val, Set<Long> timestamps);
-
   void updateStats(boolean value) {
     throw new UnsupportedOperationException();
   }
diff --git a/tsfile/src/main/java/org/apache/iotdb/tsfile/read/reader/chunk/ChunkReader.java b/tsfile/src/main/java/org/apache/iotdb/tsfile/read/reader/chunk/ChunkReader.java
index 2a4e1f7..f6d307f 100644
--- a/tsfile/src/main/java/org/apache/iotdb/tsfile/read/reader/chunk/ChunkReader.java
+++ b/tsfile/src/main/java/org/apache/iotdb/tsfile/read/reader/chunk/ChunkReader.java
@@ -157,6 +157,7 @@ public class ChunkReader implements IChunkReader {
       unCompressor.uncompress(
           compressedPageBody, 0, compressedPageBodyLength, uncompressedPageData, 0);
     } catch (Exception e) {
+      System.out.println("???");
       throw new IOException(
           "Uncompress error! uncompress size: "
               + pageHeader.getUncompressedSize()
diff --git a/tsfile/src/main/java/org/apache/iotdb/tsfile/utils/ReadWriteIOUtils.java b/tsfile/src/main/java/org/apache/iotdb/tsfile/utils/ReadWriteIOUtils.java
index 61f2b6f..b31ed90 100644
--- a/tsfile/src/main/java/org/apache/iotdb/tsfile/utils/ReadWriteIOUtils.java
+++ b/tsfile/src/main/java/org/apache/iotdb/tsfile/utils/ReadWriteIOUtils.java
@@ -36,11 +36,9 @@ import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.Collections;
 import java.util.HashMap;
-import java.util.HashSet;
 import java.util.List;
 import java.util.Map;
 import java.util.Map.Entry;
-import java.util.Set;
 
 import static org.apache.iotdb.tsfile.utils.ReadWriteIOUtils.ClassSerializeId.BINARY;
 import static org.apache.iotdb.tsfile.utils.ReadWriteIOUtils.ClassSerializeId.BOOLEAN;
@@ -374,10 +372,7 @@ public class ReadWriteIOUtils {
     }
     len += bytes.length;
     outputStream.write(bytes);
-    len += write(minMaxInfo.timestamps.size(), outputStream);
-    for (Object timestamp : minMaxInfo.timestamps) {
-      len += write((long) timestamp, outputStream);
-    }
+    len += write(minMaxInfo.timestamp, outputStream);
     return len;
   }
 
@@ -621,12 +616,8 @@ public class ReadWriteIOUtils {
         throw new IllegalArgumentException(
             String.format(KNOWN_MINMAX_DATA_TYPE_ERROR, minMaxDataType.toString()));
     }
-    int len = readInt(inputStream);
-    Set<Long> timestamps = new HashSet<>();
-    for (int i = 0; i < len; i++) {
-      timestamps.add(readLong(inputStream));
-    }
-    return new MinMaxInfo(val, timestamps);
+    long timestamp = readLong(inputStream);
+    return new MinMaxInfo(val, timestamp);
   }
 
   /** string length's type is varInt */
@@ -676,12 +667,8 @@ public class ReadWriteIOUtils {
         throw new IllegalArgumentException(
             String.format(KNOWN_MINMAX_DATA_TYPE_ERROR, minMaxDataType.toString()));
     }
-    int len = byteBuffer.getInt();
-    Set<Long> timestamps = new HashSet<>();
-    for (int i = 0; i < len; i++) {
-      timestamps.add(byteBuffer.getLong());
-    }
-    return new MinMaxInfo(val, timestamps);
+    long timestamp = byteBuffer.getLong();
+    return new MinMaxInfo(val, timestamp);
   }
 
   /** string length's type is varInt */
diff --git a/tsfile/src/test/java/org/apache/iotdb/tsfile/file/metadata/statistics/DoubleStatisticsTest.java b/tsfile/src/test/java/org/apache/iotdb/tsfile/file/metadata/statistics/DoubleStatisticsTest.java
index 2143f97..99e1f46 100644
--- a/tsfile/src/test/java/org/apache/iotdb/tsfile/file/metadata/statistics/DoubleStatisticsTest.java
+++ b/tsfile/src/test/java/org/apache/iotdb/tsfile/file/metadata/statistics/DoubleStatisticsTest.java
@@ -20,10 +20,6 @@ package org.apache.iotdb.tsfile.file.metadata.statistics;
 
 import org.junit.Test;
 
-import java.util.Collections;
-import java.util.HashSet;
-import java.util.Set;
-
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertFalse;
 import static org.junit.Assert.assertTrue;
@@ -71,9 +67,9 @@ public class DoubleStatisticsTest {
     doubleStatistics.setEndTime(2783647123649L);
     assertFalse(doubleStatistics.isEmpty());
     assertEquals(7607.41005d, doubleStatistics.getMaxInfo().val, maxError);
-    assertEquals(Collections.singleton(2783647123649L), doubleStatistics.getMaxInfo().timestamps);
+    assertEquals(2783647123649L, (long) doubleStatistics.getMaxInfo().timestamp);
     assertEquals(7607.41005d, doubleStatistics.getMinInfo().val, maxError);
-    assertEquals(Collections.singleton(2783647123649L), doubleStatistics.getMinInfo().timestamps);
+    assertEquals(2783647123649L, (long) doubleStatistics.getMinInfo().timestamp);
     //    assertEquals(2783647123649L, doubleStatistics.getStartTime());
     //    assertEquals(2783647123649L, doubleStatistics.getEndTime());
     assertEquals(7607.41005d, doubleStatistics.getFirstValue(), maxError);
@@ -83,9 +79,9 @@ public class DoubleStatisticsTest {
     doubleStatistics.setEndTime(2783647123650L);
     assertFalse(doubleStatistics.isEmpty());
     assertEquals(7607.41005d, doubleStatistics.getMaxInfo().val, maxError);
-    assertEquals(Collections.singleton(2783647123649L), doubleStatistics.getMaxInfo().timestamps);
+    assertEquals(2783647123649L, (long) doubleStatistics.getMaxInfo().timestamp);
     assertEquals(4027.54405d, doubleStatistics.getMinInfo().val, maxError);
-    assertEquals(Collections.singleton(2783647123650L), doubleStatistics.getMinInfo().timestamps);
+    assertEquals(2783647123650L, (long) doubleStatistics.getMinInfo().timestamp);
     //    assertEquals(2783647123649L, doubleStatistics.getStartTime());
     //    assertEquals(2783647123650L, doubleStatistics.getEndTime());
     assertEquals(7607.41005d, doubleStatistics.getFirstValue(), maxError);
@@ -100,9 +96,9 @@ public class DoubleStatisticsTest {
     doubleStatistics.setEndTime(2783647123656L);
 
     assertEquals(8193.24925d, doubleStatistics.getMaxInfo().val, maxError);
-    assertEquals(Collections.singleton(2783647123651L), doubleStatistics.getMaxInfo().timestamps);
+    assertEquals(2783647123651L, (long) doubleStatistics.getMaxInfo().timestamp);
     assertEquals(351.58025d, doubleStatistics.getMinInfo().val, maxError);
-    assertEquals(Collections.singleton(2783647123656L), doubleStatistics.getMinInfo().timestamps);
+    assertEquals(2783647123656L, (long) doubleStatistics.getMinInfo().timestamp);
     //    assertEquals(2783647123649L, doubleStatistics.getStartTime());
     //    assertEquals(2783647123656L, doubleStatistics.getEndTime());
     assertEquals(7607.41005d, doubleStatistics.getFirstValue(), maxError);
@@ -154,9 +150,9 @@ public class DoubleStatisticsTest {
     doubleStatistics.setEndTime(times[0]);
     assertFalse(doubleStatistics.isEmpty());
     assertEquals(vals[0], doubleStatistics.getMaxInfo().val, maxError);
-    assertEquals(Collections.singleton(times[0]), doubleStatistics.getMaxInfo().timestamps);
+    assertEquals(times[0], (long) doubleStatistics.getMaxInfo().timestamp);
     assertEquals(vals[0], doubleStatistics.getMinInfo().val, maxError);
-    assertEquals(Collections.singleton(times[0]), doubleStatistics.getMinInfo().timestamps);
+    assertEquals(times[0], (long) doubleStatistics.getMinInfo().timestamp);
     //    assertEquals(times[0], doubleStatistics.getStartTime());
     //    assertEquals(times[0], doubleStatistics.getEndTime());
     assertEquals(vals[0], doubleStatistics.getFirstValue(), maxError);
@@ -166,12 +162,10 @@ public class DoubleStatisticsTest {
     doubleStatistics.setEndTime(times[1]);
     assertFalse(doubleStatistics.isEmpty());
     assertEquals(7607.41005d, doubleStatistics.getMaxInfo().val, maxError);
-    Set<Long> expectedTimestamps = new HashSet<>();
-    expectedTimestamps.add(times[0]);
-    expectedTimestamps.add(times[1]);
-    assertEquals(expectedTimestamps, doubleStatistics.getMaxInfo().timestamps);
+    long expectedTimestamp = times[0];
+    assertEquals(expectedTimestamp, (long) doubleStatistics.getMaxInfo().timestamp);
     assertEquals(7607.41005d, doubleStatistics.getMinInfo().val, maxError);
-    assertEquals(expectedTimestamps, doubleStatistics.getMinInfo().timestamps);
+    assertEquals(expectedTimestamp, (long) doubleStatistics.getMinInfo().timestamp);
     //    assertEquals(2783647123649L, doubleStatistics.getStartTime());
     //    assertEquals(2783647123650L, doubleStatistics.getEndTime());
     assertEquals(7607.41005d, doubleStatistics.getFirstValue(), maxError);
@@ -181,10 +175,9 @@ public class DoubleStatisticsTest {
     doubleStatistics.updateStats(vals[3], times[3]);
     doubleStatistics.setEndTime(times[3]);
     assertEquals(7607.41005d, doubleStatistics.getMaxInfo().val, maxError);
-    expectedTimestamps.add(times[2]);
-    assertEquals(expectedTimestamps, doubleStatistics.getMaxInfo().timestamps);
+    assertEquals(expectedTimestamp, (long) doubleStatistics.getMaxInfo().timestamp);
     assertEquals(1380.64375d, doubleStatistics.getMinInfo().val, maxError);
-    assertEquals(Collections.singleton(times[3]), doubleStatistics.getMinInfo().timestamps);
+    assertEquals(times[3], (long) doubleStatistics.getMinInfo().timestamp);
     //    assertEquals(times[0], doubleStatistics.getStartTime());
     //    assertEquals(times[3], doubleStatistics.getEndTime());
     assertEquals(vals[0], doubleStatistics.getFirstValue(), maxError);
@@ -197,13 +190,10 @@ public class DoubleStatisticsTest {
     doubleStatistics.setEndTime(times[7]);
 
     assertEquals(7813.17305d, doubleStatistics.getMaxInfo().val, maxError);
-    assertEquals(Collections.singleton(2783647123653L), doubleStatistics.getMaxInfo().timestamps);
-
-    expectedTimestamps = new HashSet<>();
-    expectedTimestamps.add(times[6]);
-    expectedTimestamps.add(times[7]);
+    assertEquals(2783647123653L, (long) doubleStatistics.getMaxInfo().timestamp);
+    expectedTimestamp = times[6];
     assertEquals(351.58025d, doubleStatistics.getMinInfo().val, maxError);
-    assertEquals(expectedTimestamps, doubleStatistics.getMinInfo().timestamps);
+    assertEquals(expectedTimestamp, (long) doubleStatistics.getMinInfo().timestamp);
 
     //    assertEquals(times[0], doubleStatistics.getStartTime());
     //    assertEquals(times[7], doubleStatistics.getEndTime());
@@ -256,9 +246,9 @@ public class DoubleStatisticsTest {
     doubleStatistics.setEndTime(times[0]);
     assertFalse(doubleStatistics.isEmpty());
     assertEquals(vals[0], doubleStatistics.getMaxInfo().val, maxError);
-    assertEquals(Collections.singleton(times[0]), doubleStatistics.getMaxInfo().timestamps);
+    assertEquals(times[0], (long) doubleStatistics.getMaxInfo().timestamp);
     assertEquals(vals[0], doubleStatistics.getMinInfo().val, maxError);
-    assertEquals(Collections.singleton(times[0]), doubleStatistics.getMinInfo().timestamps);
+    assertEquals(times[0], (long) doubleStatistics.getMinInfo().timestamp);
     //    assertEquals(times[0], doubleStatistics.getStartTime());
     //    assertEquals(times[0], doubleStatistics.getEndTime());
     assertEquals(vals[0], doubleStatistics.getFirstValue(), maxError);
@@ -269,9 +259,9 @@ public class DoubleStatisticsTest {
     doubleStatistics.setEndTime(MaxMinUtils.maxLong(times, 0, 2));
     assertFalse(doubleStatistics.isEmpty());
     assertEquals(vals[1], doubleStatistics.getMinInfo().val, maxError);
-    assertEquals(Collections.singleton(times[1]), doubleStatistics.getMinInfo().timestamps);
+    assertEquals(times[1], (long) doubleStatistics.getMinInfo().timestamp);
     assertEquals(vals[0], doubleStatistics.getMaxInfo().val, maxError);
-    assertEquals(Collections.singleton(times[0]), doubleStatistics.getMaxInfo().timestamps);
+    assertEquals(times[0], (long) doubleStatistics.getMaxInfo().timestamp);
     //    assertEquals(times[0], doubleStatistics.getStartTime());
     //    assertEquals(times[1], doubleStatistics.getEndTime());
     assertEquals(vals[0], doubleStatistics.getFirstValue(), maxError);
@@ -282,9 +272,9 @@ public class DoubleStatisticsTest {
     doubleStatistics.setEndTime(MaxMinUtils.maxLong(times, 0, 3));
     assertFalse(doubleStatistics.isEmpty());
     assertEquals(vals[1], doubleStatistics.getMinInfo().val, maxError);
-    assertEquals(Collections.singleton(times[1]), doubleStatistics.getMinInfo().timestamps);
+    assertEquals(times[1], (long) doubleStatistics.getMinInfo().timestamp);
     assertEquals(vals[2], doubleStatistics.getMaxInfo().val, maxError);
-    assertEquals(Collections.singleton(times[2]), doubleStatistics.getMaxInfo().timestamps);
+    assertEquals(times[2], (long) doubleStatistics.getMaxInfo().timestamp);
     //    assertEquals(times[0], doubleStatistics.getStartTime());
     //    assertEquals(times[2], doubleStatistics.getEndTime());
     assertEquals(vals[0], doubleStatistics.getFirstValue(), maxError);
@@ -295,9 +285,9 @@ public class DoubleStatisticsTest {
     doubleStatistics.setEndTime(MaxMinUtils.maxLong(times, 0, 4));
     assertFalse(doubleStatistics.isEmpty());
     assertEquals(vals[3], doubleStatistics.getMinInfo().val, maxError);
-    assertEquals(Collections.singleton(times[3]), doubleStatistics.getMinInfo().timestamps);
+    assertEquals(times[3], (long) doubleStatistics.getMinInfo().timestamp);
     assertEquals(vals[2], doubleStatistics.getMaxInfo().val, maxError);
-    assertEquals(Collections.singleton(times[2]), doubleStatistics.getMaxInfo().timestamps);
+    assertEquals(times[2], (long) doubleStatistics.getMaxInfo().timestamp);
     //    assertEquals(times[0], doubleStatistics.getStartTime());
     //    assertEquals(times[3], doubleStatistics.getEndTime());
     assertEquals(vals[0], doubleStatistics.getFirstValue(), maxError);
@@ -308,9 +298,9 @@ public class DoubleStatisticsTest {
     doubleStatistics.setEndTime(MaxMinUtils.maxLong(times, 0, 5));
     assertFalse(doubleStatistics.isEmpty());
     assertEquals(vals[3], doubleStatistics.getMinInfo().val, maxError);
-    assertEquals(Collections.singleton(times[3]), doubleStatistics.getMinInfo().timestamps);
+    assertEquals(times[3], (long) doubleStatistics.getMinInfo().timestamp);
     assertEquals(vals[2], doubleStatistics.getMaxInfo().val, maxError);
-    assertEquals(Collections.singleton(times[2]), doubleStatistics.getMaxInfo().timestamps);
+    assertEquals(times[2], (long) doubleStatistics.getMaxInfo().timestamp);
     //    assertEquals(times[0], doubleStatistics.getStartTime());
     //    assertEquals(times[4], doubleStatistics.getEndTime());
     assertEquals(vals[0], doubleStatistics.getFirstValue(), maxError);
@@ -321,9 +311,9 @@ public class DoubleStatisticsTest {
     doubleStatistics.setEndTime(MaxMinUtils.maxLong(times, 0, 6));
     assertFalse(doubleStatistics.isEmpty());
     assertEquals(vals[3], doubleStatistics.getMinInfo().val, maxError);
-    assertEquals(Collections.singleton(times[3]), doubleStatistics.getMinInfo().timestamps);
+    assertEquals(times[3], (long) doubleStatistics.getMinInfo().timestamp);
     assertEquals(vals[2], doubleStatistics.getMaxInfo().val, maxError);
-    assertEquals(Collections.singleton(times[2]), doubleStatistics.getMaxInfo().timestamps);
+    assertEquals(times[2], (long) doubleStatistics.getMaxInfo().timestamp);
     //    assertEquals(times[0], doubleStatistics.getStartTime());
     //    assertEquals(times[5], doubleStatistics.getEndTime());
     assertEquals(vals[0], doubleStatistics.getFirstValue(), maxError);
@@ -334,9 +324,9 @@ public class DoubleStatisticsTest {
     doubleStatistics.setEndTime(MaxMinUtils.maxLong(times, 0, 7));
     assertFalse(doubleStatistics.isEmpty());
     assertEquals(vals[3], doubleStatistics.getMinInfo().val, maxError);
-    assertEquals(Collections.singleton(times[3]), doubleStatistics.getMinInfo().timestamps);
+    assertEquals(times[3], (long) doubleStatistics.getMinInfo().timestamp);
     assertEquals(vals[2], doubleStatistics.getMaxInfo().val, maxError);
-    assertEquals(Collections.singleton(times[2]), doubleStatistics.getMaxInfo().timestamps);
+    assertEquals(times[2], (long) doubleStatistics.getMaxInfo().timestamp);
     //    assertEquals(times[0], doubleStatistics.getStartTime());
     //    assertEquals(times[6], doubleStatistics.getEndTime());
     assertEquals(vals[0], doubleStatistics.getFirstValue(), maxError);
@@ -347,9 +337,9 @@ public class DoubleStatisticsTest {
     doubleStatistics.setEndTime(MaxMinUtils.maxLong(times, 0, 8));
     assertFalse(doubleStatistics.isEmpty());
     assertEquals(vals[7], doubleStatistics.getMinInfo().val, maxError);
-    assertEquals(Collections.singleton(times[7]), doubleStatistics.getMinInfo().timestamps);
+    assertEquals(times[7], (long) doubleStatistics.getMinInfo().timestamp);
     assertEquals(vals[2], doubleStatistics.getMaxInfo().val, maxError);
-    assertEquals(Collections.singleton(times[2]), doubleStatistics.getMaxInfo().timestamps);
+    assertEquals(times[2], (long) doubleStatistics.getMaxInfo().timestamp);
     //    assertEquals(times[0], doubleStatistics.getStartTime());
     //    assertEquals(times[7], doubleStatistics.getEndTime());
     assertEquals(vals[0], doubleStatistics.getFirstValue(), maxError);
@@ -380,9 +370,9 @@ public class DoubleStatisticsTest {
     doubleStatistics1.mergeStatistics(doubleStatistics2);
     assertFalse(doubleStatistics1.isEmpty());
     assertEquals(100.5d, doubleStatistics1.getMinInfo().val, maxError);
-    assertEquals(Collections.singleton(1000L), doubleStatistics1.getMinInfo().timestamps);
+    assertEquals(1000L, (long) doubleStatistics1.getMinInfo().timestamp);
     assertEquals(10000.5d, doubleStatistics1.getMaxInfo().val, maxError);
-    assertEquals(Collections.singleton(5000L), doubleStatistics1.getMaxInfo().timestamps);
+    assertEquals(5000L, (long) doubleStatistics1.getMaxInfo().timestamp);
     //    assertEquals(1000L, doubleStatistics1.getStartTime());
     //    assertEquals(7000L, doubleStatistics1.getEndTime());
     assertEquals(100.5d, doubleStatistics1.getFirstValue(), maxError);
@@ -401,9 +391,9 @@ public class DoubleStatisticsTest {
     doubleStatistics1.mergeStatistics(doubleStatistics2);
     assertFalse(doubleStatistics1.isEmpty());
     assertEquals(100.5d, doubleStatistics1.getMinInfo().val, maxError);
-    assertEquals(Collections.singleton(1000L), doubleStatistics1.getMinInfo().timestamps);
+    assertEquals(1000L, (long) doubleStatistics1.getMinInfo().timestamp);
     assertEquals(80000.5d, doubleStatistics1.getMaxInfo().val, maxError);
-    assertEquals(Collections.singleton(7000L), doubleStatistics1.getMaxInfo().timestamps);
+    assertEquals(7000L, (long) doubleStatistics1.getMaxInfo().timestamp);
     //    assertEquals(1000L, doubleStatistics1.getStartTime());
     //    assertEquals(7000L, doubleStatistics1.getEndTime());
     assertEquals(100.5d, doubleStatistics1.getFirstValue(), maxError);
@@ -422,9 +412,9 @@ public class DoubleStatisticsTest {
     doubleStatistics1.mergeStatistics(doubleStatistics2);
     assertFalse(doubleStatistics1.isEmpty());
     assertEquals(10.5d, doubleStatistics1.getMinInfo().val, maxError);
-    assertEquals(Collections.singleton(6000L), doubleStatistics1.getMinInfo().timestamps);
+    assertEquals(6000L, (long) doubleStatistics1.getMinInfo().timestamp);
     assertEquals(10000.5d, doubleStatistics1.getMaxInfo().val, maxError);
-    assertEquals(Collections.singleton(5000L), doubleStatistics1.getMaxInfo().timestamps);
+    assertEquals(5000L, (long) doubleStatistics1.getMaxInfo().timestamp);
     //    assertEquals(1000L, doubleStatistics1.getStartTime());
     //    assertEquals(7000L, doubleStatistics1.getEndTime());
     assertEquals(100.5d, doubleStatistics1.getFirstValue(), maxError);
diff --git a/tsfile/src/test/java/org/apache/iotdb/tsfile/file/metadata/statistics/FloatStatisticsTest.java b/tsfile/src/test/java/org/apache/iotdb/tsfile/file/metadata/statistics/FloatStatisticsTest.java
index 33f220c..fb4842c 100644
--- a/tsfile/src/test/java/org/apache/iotdb/tsfile/file/metadata/statistics/FloatStatisticsTest.java
+++ b/tsfile/src/test/java/org/apache/iotdb/tsfile/file/metadata/statistics/FloatStatisticsTest.java
@@ -20,10 +20,6 @@ package org.apache.iotdb.tsfile.file.metadata.statistics;
 
 import org.junit.Test;
 
-import java.util.Collections;
-import java.util.HashSet;
-import java.util.Set;
-
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertFalse;
 import static org.junit.Assert.assertTrue;
@@ -71,9 +67,9 @@ public class FloatStatisticsTest {
     floatStatistics.setEndTime(2783647123649L);
     assertFalse(floatStatistics.isEmpty());
     assertEquals(7607.41005f, floatStatistics.getMaxInfo().val, maxError);
-    assertEquals(Collections.singleton(2783647123649L), floatStatistics.getMaxInfo().timestamps);
+    assertEquals(2783647123649L, (long) floatStatistics.getMaxInfo().timestamp);
     assertEquals(7607.41005f, floatStatistics.getMinInfo().val, maxError);
-    assertEquals(Collections.singleton(2783647123649L), floatStatistics.getMinInfo().timestamps);
+    assertEquals(2783647123649L, (long) floatStatistics.getMinInfo().timestamp);
     //    assertEquals(2783647123649L, floatStatistics.getStartTime());
     //    assertEquals(2783647123649L, floatStatistics.getEndTime());
     assertEquals(7607.41005f, floatStatistics.getFirstValue(), maxError);
@@ -83,9 +79,9 @@ public class FloatStatisticsTest {
     floatStatistics.setEndTime(2783647123650L);
     assertFalse(floatStatistics.isEmpty());
     assertEquals(7607.41005f, floatStatistics.getMaxInfo().val, maxError);
-    assertEquals(Collections.singleton(2783647123649L), floatStatistics.getMaxInfo().timestamps);
+    assertEquals(2783647123649L, (long) floatStatistics.getMaxInfo().timestamp);
     assertEquals(4027.54405f, floatStatistics.getMinInfo().val, maxError);
-    assertEquals(Collections.singleton(2783647123650L), floatStatistics.getMinInfo().timestamps);
+    assertEquals(2783647123650L, (long) floatStatistics.getMinInfo().timestamp);
     //    assertEquals(2783647123649L, floatStatistics.getStartTime());
     //    assertEquals(2783647123650L, floatStatistics.getEndTime());
     assertEquals(7607.41005f, floatStatistics.getFirstValue(), maxError);
@@ -100,9 +96,9 @@ public class FloatStatisticsTest {
     floatStatistics.setEndTime(2783647123656L);
 
     assertEquals(8193.24925f, floatStatistics.getMaxInfo().val, maxError);
-    assertEquals(Collections.singleton(2783647123651L), floatStatistics.getMaxInfo().timestamps);
+    assertEquals(2783647123651L, (long) floatStatistics.getMaxInfo().timestamp);
     assertEquals(351.58025f, floatStatistics.getMinInfo().val, maxError);
-    assertEquals(Collections.singleton(2783647123656L), floatStatistics.getMinInfo().timestamps);
+    assertEquals(2783647123656L, (long) floatStatistics.getMinInfo().timestamp);
     //    assertEquals(2783647123649L, floatStatistics.getStartTime());
     //    assertEquals(2783647123656L, floatStatistics.getEndTime());
     assertEquals(7607.41005f, floatStatistics.getFirstValue(), maxError);
@@ -154,9 +150,9 @@ public class FloatStatisticsTest {
     floatStatistics.setEndTime(times[0]);
     assertFalse(floatStatistics.isEmpty());
     assertEquals(vals[0], floatStatistics.getMaxInfo().val, maxError);
-    assertEquals(Collections.singleton(times[0]), floatStatistics.getMaxInfo().timestamps);
+    assertEquals(times[0], (long) floatStatistics.getMaxInfo().timestamp);
     assertEquals(vals[0], floatStatistics.getMinInfo().val, maxError);
-    assertEquals(Collections.singleton(times[0]), floatStatistics.getMinInfo().timestamps);
+    assertEquals(times[0], (long) floatStatistics.getMinInfo().timestamp);
     //    assertEquals(times[0], floatStatistics.getStartTime());
     //    assertEquals(times[0], floatStatistics.getEndTime());
     assertEquals(vals[0], floatStatistics.getFirstValue(), maxError);
@@ -166,12 +162,10 @@ public class FloatStatisticsTest {
     floatStatistics.setEndTime(times[1]);
     assertFalse(floatStatistics.isEmpty());
     assertEquals(7607.41005f, floatStatistics.getMaxInfo().val, maxError);
-    Set<Long> expectedTimestamps = new HashSet<>();
-    expectedTimestamps.add(times[0]);
-    expectedTimestamps.add(times[1]);
-    assertEquals(expectedTimestamps, floatStatistics.getMaxInfo().timestamps);
+    long expectedTimestamp = times[0];
+    assertEquals(expectedTimestamp, (long) floatStatistics.getMaxInfo().timestamp);
     assertEquals(7607.41005f, floatStatistics.getMinInfo().val, maxError);
-    assertEquals(expectedTimestamps, floatStatistics.getMinInfo().timestamps);
+    assertEquals(expectedTimestamp, (long) floatStatistics.getMinInfo().timestamp);
     //    assertEquals(2783647123649L, floatStatistics.getStartTime());
     //    assertEquals(2783647123650L, floatStatistics.getEndTime());
     assertEquals(7607.41005f, floatStatistics.getFirstValue(), maxError);
@@ -181,10 +175,9 @@ public class FloatStatisticsTest {
     floatStatistics.updateStats(vals[3], times[3]);
     floatStatistics.setEndTime(times[3]);
     assertEquals(7607.41005f, floatStatistics.getMaxInfo().val, maxError);
-    expectedTimestamps.add(times[2]);
-    assertEquals(expectedTimestamps, floatStatistics.getMaxInfo().timestamps);
+    assertEquals(expectedTimestamp, (long) floatStatistics.getMaxInfo().timestamp);
     assertEquals(1380.64375f, floatStatistics.getMinInfo().val, maxError);
-    assertEquals(Collections.singleton(times[3]), floatStatistics.getMinInfo().timestamps);
+    assertEquals(times[3], (long) floatStatistics.getMinInfo().timestamp);
     //    assertEquals(times[0], floatStatistics.getStartTime());
     //    assertEquals(times[3], floatStatistics.getEndTime());
     assertEquals(vals[0], floatStatistics.getFirstValue(), maxError);
@@ -197,13 +190,12 @@ public class FloatStatisticsTest {
     floatStatistics.setEndTime(times[7]);
 
     assertEquals(7813.17305f, floatStatistics.getMaxInfo().val, maxError);
-    assertEquals(Collections.singleton(2783647123653L), floatStatistics.getMaxInfo().timestamps);
+    assertEquals(2783647123653L, (long) floatStatistics.getMaxInfo().timestamp);
+
+    expectedTimestamp = times[6];
 
-    expectedTimestamps = new HashSet<>();
-    expectedTimestamps.add(times[6]);
-    expectedTimestamps.add(times[7]);
     assertEquals(351.58025f, floatStatistics.getMinInfo().val, maxError);
-    assertEquals(expectedTimestamps, floatStatistics.getMinInfo().timestamps);
+    assertEquals(expectedTimestamp, (long) floatStatistics.getMinInfo().timestamp);
 
     //    assertEquals(times[0], floatStatistics.getStartTime());
     //    assertEquals(times[7], floatStatistics.getEndTime());
@@ -256,9 +248,9 @@ public class FloatStatisticsTest {
     floatStatistics.setEndTime(times[0]);
     assertFalse(floatStatistics.isEmpty());
     assertEquals(vals[0], floatStatistics.getMaxInfo().val, maxError);
-    assertEquals(Collections.singleton(times[0]), floatStatistics.getMaxInfo().timestamps);
+    assertEquals(times[0], (long) floatStatistics.getMaxInfo().timestamp);
     assertEquals(vals[0], floatStatistics.getMinInfo().val, maxError);
-    assertEquals(Collections.singleton(times[0]), floatStatistics.getMinInfo().timestamps);
+    assertEquals(times[0], (long) floatStatistics.getMinInfo().timestamp);
     //    assertEquals(times[0], floatStatistics.getStartTime());
     //    assertEquals(times[0], floatStatistics.getEndTime());
     assertEquals(vals[0], floatStatistics.getFirstValue(), maxError);
@@ -269,9 +261,9 @@ public class FloatStatisticsTest {
     floatStatistics.setEndTime(MaxMinUtils.maxLong(times, 0, 2));
     assertFalse(floatStatistics.isEmpty());
     assertEquals(vals[1], floatStatistics.getMinInfo().val, maxError);
-    assertEquals(Collections.singleton(times[1]), floatStatistics.getMinInfo().timestamps);
+    assertEquals(times[1], (long) floatStatistics.getMinInfo().timestamp);
     assertEquals(vals[0], floatStatistics.getMaxInfo().val, maxError);
-    assertEquals(Collections.singleton(times[0]), floatStatistics.getMaxInfo().timestamps);
+    assertEquals(times[0], (long) floatStatistics.getMaxInfo().timestamp);
     //    assertEquals(times[0], floatStatistics.getStartTime());
     //    assertEquals(times[1], floatStatistics.getEndTime());
     assertEquals(vals[0], floatStatistics.getFirstValue(), maxError);
@@ -282,9 +274,9 @@ public class FloatStatisticsTest {
     floatStatistics.setEndTime(MaxMinUtils.maxLong(times, 0, 3));
     assertFalse(floatStatistics.isEmpty());
     assertEquals(vals[1], floatStatistics.getMinInfo().val, maxError);
-    assertEquals(Collections.singleton(times[1]), floatStatistics.getMinInfo().timestamps);
+    assertEquals(times[1], (long) floatStatistics.getMinInfo().timestamp);
     assertEquals(vals[2], floatStatistics.getMaxInfo().val, maxError);
-    assertEquals(Collections.singleton(times[2]), floatStatistics.getMaxInfo().timestamps);
+    assertEquals(times[2], (long) floatStatistics.getMaxInfo().timestamp);
     //    assertEquals(times[0], floatStatistics.getStartTime());
     //    assertEquals(times[2], floatStatistics.getEndTime());
     assertEquals(vals[0], floatStatistics.getFirstValue(), maxError);
@@ -295,9 +287,9 @@ public class FloatStatisticsTest {
     floatStatistics.setEndTime(MaxMinUtils.maxLong(times, 0, 4));
     assertFalse(floatStatistics.isEmpty());
     assertEquals(vals[3], floatStatistics.getMinInfo().val, maxError);
-    assertEquals(Collections.singleton(times[3]), floatStatistics.getMinInfo().timestamps);
+    assertEquals(times[3], (long) floatStatistics.getMinInfo().timestamp);
     assertEquals(vals[2], floatStatistics.getMaxInfo().val, maxError);
-    assertEquals(Collections.singleton(times[2]), floatStatistics.getMaxInfo().timestamps);
+    assertEquals(times[2], (long) floatStatistics.getMaxInfo().timestamp);
     //    assertEquals(times[0], floatStatistics.getStartTime());
     //    assertEquals(times[3], floatStatistics.getEndTime());
     assertEquals(vals[0], floatStatistics.getFirstValue(), maxError);
@@ -308,9 +300,9 @@ public class FloatStatisticsTest {
     floatStatistics.setEndTime(MaxMinUtils.maxLong(times, 0, 5));
     assertFalse(floatStatistics.isEmpty());
     assertEquals(vals[3], floatStatistics.getMinInfo().val, maxError);
-    assertEquals(Collections.singleton(times[3]), floatStatistics.getMinInfo().timestamps);
+    assertEquals(times[3], (long) floatStatistics.getMinInfo().timestamp);
     assertEquals(vals[2], floatStatistics.getMaxInfo().val, maxError);
-    assertEquals(Collections.singleton(times[2]), floatStatistics.getMaxInfo().timestamps);
+    assertEquals(times[2], (long) floatStatistics.getMaxInfo().timestamp);
     //    assertEquals(times[0], floatStatistics.getStartTime());
     //    assertEquals(times[4], floatStatistics.getEndTime());
     assertEquals(vals[0], floatStatistics.getFirstValue(), maxError);
@@ -321,9 +313,9 @@ public class FloatStatisticsTest {
     floatStatistics.setEndTime(MaxMinUtils.maxLong(times, 0, 6));
     assertFalse(floatStatistics.isEmpty());
     assertEquals(vals[3], floatStatistics.getMinInfo().val, maxError);
-    assertEquals(Collections.singleton(times[3]), floatStatistics.getMinInfo().timestamps);
+    assertEquals(times[3], (long) floatStatistics.getMinInfo().timestamp);
     assertEquals(vals[2], floatStatistics.getMaxInfo().val, maxError);
-    assertEquals(Collections.singleton(times[2]), floatStatistics.getMaxInfo().timestamps);
+    assertEquals(times[2], (long) floatStatistics.getMaxInfo().timestamp);
     //    assertEquals(times[0], floatStatistics.getStartTime());
     //    assertEquals(times[5], floatStatistics.getEndTime());
     assertEquals(vals[0], floatStatistics.getFirstValue(), maxError);
@@ -334,9 +326,9 @@ public class FloatStatisticsTest {
     floatStatistics.setEndTime(MaxMinUtils.maxLong(times, 0, 7));
     assertFalse(floatStatistics.isEmpty());
     assertEquals(vals[3], floatStatistics.getMinInfo().val, maxError);
-    assertEquals(Collections.singleton(times[3]), floatStatistics.getMinInfo().timestamps);
+    assertEquals(times[3], (long) floatStatistics.getMinInfo().timestamp);
     assertEquals(vals[2], floatStatistics.getMaxInfo().val, maxError);
-    assertEquals(Collections.singleton(times[2]), floatStatistics.getMaxInfo().timestamps);
+    assertEquals(times[2], (long) floatStatistics.getMaxInfo().timestamp);
     //    assertEquals(times[0], floatStatistics.getStartTime());
     //    assertEquals(times[6], floatStatistics.getEndTime());
     assertEquals(vals[0], floatStatistics.getFirstValue(), maxError);
@@ -347,9 +339,9 @@ public class FloatStatisticsTest {
     floatStatistics.setEndTime(MaxMinUtils.maxLong(times, 0, 8));
     assertFalse(floatStatistics.isEmpty());
     assertEquals(vals[7], floatStatistics.getMinInfo().val, maxError);
-    assertEquals(Collections.singleton(times[7]), floatStatistics.getMinInfo().timestamps);
+    assertEquals(times[7], (long) floatStatistics.getMinInfo().timestamp);
     assertEquals(vals[2], floatStatistics.getMaxInfo().val, maxError);
-    assertEquals(Collections.singleton(times[2]), floatStatistics.getMaxInfo().timestamps);
+    assertEquals(times[2], (long) floatStatistics.getMaxInfo().timestamp);
     //    assertEquals(times[0], floatStatistics.getStartTime());
     //    assertEquals(times[7], floatStatistics.getEndTime());
     assertEquals(vals[0], floatStatistics.getFirstValue(), maxError);
@@ -380,9 +372,9 @@ public class FloatStatisticsTest {
     floatStatistics1.mergeStatistics(floatStatistics2);
     assertFalse(floatStatistics1.isEmpty());
     assertEquals(100.5f, floatStatistics1.getMinInfo().val, maxError);
-    assertEquals(Collections.singleton(1000L), floatStatistics1.getMinInfo().timestamps);
+    assertEquals(1000L, (long) floatStatistics1.getMinInfo().timestamp);
     assertEquals(10000.5f, floatStatistics1.getMaxInfo().val, maxError);
-    assertEquals(Collections.singleton(5000L), floatStatistics1.getMaxInfo().timestamps);
+    assertEquals(5000L, (long) floatStatistics1.getMaxInfo().timestamp);
     //    assertEquals(1000L, floatStatistics1.getStartTime());
     //    assertEquals(7000L, floatStatistics1.getEndTime());
     assertEquals(100.5f, floatStatistics1.getFirstValue(), maxError);
@@ -401,9 +393,9 @@ public class FloatStatisticsTest {
     floatStatistics1.mergeStatistics(floatStatistics2);
     assertFalse(floatStatistics1.isEmpty());
     assertEquals(100.5f, floatStatistics1.getMinInfo().val, maxError);
-    assertEquals(Collections.singleton(1000L), floatStatistics1.getMinInfo().timestamps);
+    assertEquals(1000L, (long) floatStatistics1.getMinInfo().timestamp);
     assertEquals(80000.5f, floatStatistics1.getMaxInfo().val, maxError);
-    assertEquals(Collections.singleton(7000L), floatStatistics1.getMaxInfo().timestamps);
+    assertEquals(7000L, (long) floatStatistics1.getMaxInfo().timestamp);
     //    assertEquals(1000L, floatStatistics1.getStartTime());
     //    assertEquals(7000L, floatStatistics1.getEndTime());
     assertEquals(100.5f, floatStatistics1.getFirstValue(), maxError);
@@ -422,9 +414,9 @@ public class FloatStatisticsTest {
     floatStatistics1.mergeStatistics(floatStatistics2);
     assertFalse(floatStatistics1.isEmpty());
     assertEquals(10.5f, floatStatistics1.getMinInfo().val, maxError);
-    assertEquals(Collections.singleton(6000L), floatStatistics1.getMinInfo().timestamps);
+    assertEquals(6000L, (long) floatStatistics1.getMinInfo().timestamp);
     assertEquals(10000.5f, floatStatistics1.getMaxInfo().val, maxError);
-    assertEquals(Collections.singleton(5000L), floatStatistics1.getMaxInfo().timestamps);
+    assertEquals(5000L, (long) floatStatistics1.getMaxInfo().timestamp);
     //    assertEquals(1000L, floatStatistics1.getStartTime());
     //    assertEquals(7000L, floatStatistics1.getEndTime());
     assertEquals(100.5f, floatStatistics1.getFirstValue(), maxError);
diff --git a/tsfile/src/test/java/org/apache/iotdb/tsfile/file/metadata/statistics/IntegerStatisticsTest.java b/tsfile/src/test/java/org/apache/iotdb/tsfile/file/metadata/statistics/IntegerStatisticsTest.java
index 993cf37..36b2960 100644
--- a/tsfile/src/test/java/org/apache/iotdb/tsfile/file/metadata/statistics/IntegerStatisticsTest.java
+++ b/tsfile/src/test/java/org/apache/iotdb/tsfile/file/metadata/statistics/IntegerStatisticsTest.java
@@ -20,10 +20,6 @@ package org.apache.iotdb.tsfile.file.metadata.statistics;
 
 import org.junit.Test;
 
-import java.util.Collections;
-import java.util.HashSet;
-import java.util.Set;
-
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertFalse;
 import static org.junit.Assert.assertTrue;
@@ -60,9 +56,9 @@ public class IntegerStatisticsTest {
     integerStatistics.setEndTime(2783647123649L);
     assertFalse(integerStatistics.isEmpty());
     assertEquals(76074100, (long) integerStatistics.getMaxInfo().val);
-    assertEquals(Collections.singleton(2783647123649L), integerStatistics.getMaxInfo().timestamps);
+    assertEquals(2783647123649L, (long) integerStatistics.getMaxInfo().timestamp);
     assertEquals(76074100, (long) integerStatistics.getMinInfo().val);
-    assertEquals(Collections.singleton(2783647123649L), integerStatistics.getMinInfo().timestamps);
+    assertEquals(2783647123649L, (long) integerStatistics.getMinInfo().timestamp);
     //    assertEquals(2783647123649L, integerStatistics.getStartTime());
     //    assertEquals(2783647123649L, integerStatistics.getEndTime());
     assertEquals(76074100, (long) integerStatistics.getFirstValue());
@@ -72,9 +68,9 @@ public class IntegerStatisticsTest {
     integerStatistics.setEndTime(2783647123650L);
     assertFalse(integerStatistics.isEmpty());
     assertEquals(76074100, (long) integerStatistics.getMaxInfo().val);
-    assertEquals(Collections.singleton(2783647123649L), integerStatistics.getMaxInfo().timestamps);
+    assertEquals(2783647123649L, (long) integerStatistics.getMaxInfo().timestamp);
     assertEquals(40275440, (long) integerStatistics.getMinInfo().val);
-    assertEquals(Collections.singleton(2783647123650L), integerStatistics.getMinInfo().timestamps);
+    assertEquals(2783647123650L, (long) integerStatistics.getMinInfo().timestamp);
     //    assertEquals(2783647123649L, integerStatistics.getStartTime());
     //    assertEquals(2783647123650L, integerStatistics.getEndTime());
     assertEquals(76074100, (long) integerStatistics.getFirstValue());
@@ -89,9 +85,9 @@ public class IntegerStatisticsTest {
     integerStatistics.setEndTime(2783647123656L);
 
     assertEquals(81932492, (long) integerStatistics.getMaxInfo().val);
-    assertEquals(Collections.singleton(2783647123651L), integerStatistics.getMaxInfo().timestamps);
+    assertEquals(2783647123651L, (long) integerStatistics.getMaxInfo().timestamp);
     assertEquals(3515802, (long) integerStatistics.getMinInfo().val);
-    assertEquals(Collections.singleton(2783647123656L), integerStatistics.getMinInfo().timestamps);
+    assertEquals(2783647123656L, (long) integerStatistics.getMinInfo().timestamp);
     //    assertEquals(2783647123649L, integerStatistics.getStartTime());
     //    assertEquals(2783647123656L, integerStatistics.getEndTime());
     assertEquals(76074100, (long) integerStatistics.getFirstValue());
@@ -134,9 +130,9 @@ public class IntegerStatisticsTest {
     integerStatistics.setEndTime(times[0]);
     assertFalse(integerStatistics.isEmpty());
     assertEquals(vals[0], (long) integerStatistics.getMaxInfo().val);
-    assertEquals(Collections.singleton(times[0]), integerStatistics.getMaxInfo().timestamps);
+    assertEquals(times[0], (long) integerStatistics.getMaxInfo().timestamp);
     assertEquals(vals[0], (long) integerStatistics.getMinInfo().val);
-    assertEquals(Collections.singleton(times[0]), integerStatistics.getMinInfo().timestamps);
+    assertEquals(times[0], (long) integerStatistics.getMinInfo().timestamp);
     //    assertEquals(times[0], integerStatistics.getStartTime());
     //    assertEquals(times[0], integerStatistics.getEndTime());
     assertEquals(vals[0], (long) integerStatistics.getFirstValue());
@@ -146,12 +142,10 @@ public class IntegerStatisticsTest {
     integerStatistics.setEndTime(times[1]);
     assertFalse(integerStatistics.isEmpty());
     assertEquals(76074100, (long) integerStatistics.getMaxInfo().val);
-    Set<Long> expectedTimestamps = new HashSet<>();
-    expectedTimestamps.add(times[0]);
-    expectedTimestamps.add(times[1]);
-    assertEquals(expectedTimestamps, integerStatistics.getMaxInfo().timestamps);
+    long expectedTimestamp = times[0];
+    assertEquals(expectedTimestamp, (long) integerStatistics.getMaxInfo().timestamp);
     assertEquals(76074100, (long) integerStatistics.getMinInfo().val);
-    assertEquals(expectedTimestamps, integerStatistics.getMinInfo().timestamps);
+    assertEquals(expectedTimestamp, (long) integerStatistics.getMinInfo().timestamp);
     //    assertEquals(2783647123649L, integerStatistics.getStartTime());
     //    assertEquals(2783647123650L, integerStatistics.getEndTime());
     assertEquals(76074100, (long) integerStatistics.getFirstValue());
@@ -161,10 +155,9 @@ public class IntegerStatisticsTest {
     integerStatistics.updateStats(vals[3], times[3]);
     integerStatistics.setEndTime(times[3]);
     assertEquals(76074100, (long) integerStatistics.getMaxInfo().val);
-    expectedTimestamps.add(times[2]);
-    assertEquals(expectedTimestamps, integerStatistics.getMaxInfo().timestamps);
+    assertEquals(expectedTimestamp, (long) integerStatistics.getMaxInfo().timestamp);
     assertEquals(13806437, (long) integerStatistics.getMinInfo().val);
-    assertEquals(Collections.singleton(times[3]), integerStatistics.getMinInfo().timestamps);
+    assertEquals(times[3], (long) integerStatistics.getMinInfo().timestamp);
     //    assertEquals(times[0], integerStatistics.getStartTime());
     //    assertEquals(times[3], integerStatistics.getEndTime());
     assertEquals(vals[0], (long) integerStatistics.getFirstValue());
@@ -177,13 +170,11 @@ public class IntegerStatisticsTest {
     integerStatistics.setEndTime(times[7]);
 
     assertEquals(78131730, (long) integerStatistics.getMaxInfo().val);
-    assertEquals(Collections.singleton(2783647123653L), integerStatistics.getMaxInfo().timestamps);
+    assertEquals(2783647123653L, (long) integerStatistics.getMaxInfo().timestamp);
 
-    expectedTimestamps = new HashSet<>();
-    expectedTimestamps.add(times[6]);
-    expectedTimestamps.add(times[7]);
+    expectedTimestamp = times[6];
     assertEquals(3515802, (long) integerStatistics.getMinInfo().val);
-    assertEquals(expectedTimestamps, integerStatistics.getMinInfo().timestamps);
+    assertEquals(expectedTimestamp, (long) integerStatistics.getMinInfo().timestamp);
 
     //    assertEquals(times[0], integerStatistics.getStartTime());
     //    assertEquals(times[7], integerStatistics.getEndTime());
@@ -227,9 +218,9 @@ public class IntegerStatisticsTest {
     integerStatistics.setEndTime(times[0]);
     assertFalse(integerStatistics.isEmpty());
     assertEquals(vals[0], (long) integerStatistics.getMaxInfo().val);
-    assertEquals(Collections.singleton(times[0]), integerStatistics.getMaxInfo().timestamps);
+    assertEquals(times[0], (long) integerStatistics.getMaxInfo().timestamp);
     assertEquals(vals[0], (long) integerStatistics.getMinInfo().val);
-    assertEquals(Collections.singleton(times[0]), integerStatistics.getMinInfo().timestamps);
+    assertEquals(times[0], (long) integerStatistics.getMinInfo().timestamp);
     //    assertEquals(times[0], integerStatistics.getStartTime());
     //    assertEquals(times[0], integerStatistics.getEndTime());
     assertEquals(vals[0], (long) integerStatistics.getFirstValue());
@@ -240,9 +231,9 @@ public class IntegerStatisticsTest {
     integerStatistics.setEndTime(MaxMinUtils.maxLong(times, 0, 2));
     assertFalse(integerStatistics.isEmpty());
     assertEquals(vals[1], (long) integerStatistics.getMinInfo().val);
-    assertEquals(Collections.singleton(times[1]), integerStatistics.getMinInfo().timestamps);
+    assertEquals(times[1], (long) integerStatistics.getMinInfo().timestamp);
     assertEquals(vals[0], (long) integerStatistics.getMaxInfo().val);
-    assertEquals(Collections.singleton(times[0]), integerStatistics.getMaxInfo().timestamps);
+    assertEquals(times[0], (long) integerStatistics.getMaxInfo().timestamp);
     //    assertEquals(times[0], integerStatistics.getStartTime());
     //    assertEquals(times[1], integerStatistics.getEndTime());
     assertEquals(vals[0], (long) integerStatistics.getFirstValue());
@@ -253,9 +244,9 @@ public class IntegerStatisticsTest {
     integerStatistics.setEndTime(MaxMinUtils.maxLong(times, 0, 3));
     assertFalse(integerStatistics.isEmpty());
     assertEquals(vals[1], (long) integerStatistics.getMinInfo().val);
-    assertEquals(Collections.singleton(times[1]), integerStatistics.getMinInfo().timestamps);
+    assertEquals(times[1], (long) integerStatistics.getMinInfo().timestamp);
     assertEquals(vals[2], (long) integerStatistics.getMaxInfo().val);
-    assertEquals(Collections.singleton(times[2]), integerStatistics.getMaxInfo().timestamps);
+    assertEquals(times[2], (long) integerStatistics.getMaxInfo().timestamp);
     //    assertEquals(times[0], integerStatistics.getStartTime());
     //    assertEquals(times[2], integerStatistics.getEndTime());
     assertEquals(vals[0], (long) integerStatistics.getFirstValue());
@@ -266,9 +257,9 @@ public class IntegerStatisticsTest {
     integerStatistics.setEndTime(MaxMinUtils.maxLong(times, 0, 4));
     assertFalse(integerStatistics.isEmpty());
     assertEquals(vals[3], (long) integerStatistics.getMinInfo().val);
-    assertEquals(Collections.singleton(times[3]), integerStatistics.getMinInfo().timestamps);
+    assertEquals(times[3], (long) integerStatistics.getMinInfo().timestamp);
     assertEquals(vals[2], (long) integerStatistics.getMaxInfo().val);
-    assertEquals(Collections.singleton(times[2]), integerStatistics.getMaxInfo().timestamps);
+    assertEquals(times[2], (long) integerStatistics.getMaxInfo().timestamp);
     //    assertEquals(times[0], integerStatistics.getStartTime());
     //    assertEquals(times[3], integerStatistics.getEndTime());
     assertEquals(vals[0], (long) integerStatistics.getFirstValue());
@@ -279,9 +270,9 @@ public class IntegerStatisticsTest {
     integerStatistics.setEndTime(MaxMinUtils.maxLong(times, 0, 5));
     assertFalse(integerStatistics.isEmpty());
     assertEquals(vals[3], (long) integerStatistics.getMinInfo().val);
-    assertEquals(Collections.singleton(times[3]), integerStatistics.getMinInfo().timestamps);
+    assertEquals(times[3], (long) integerStatistics.getMinInfo().timestamp);
     assertEquals(vals[2], (long) integerStatistics.getMaxInfo().val);
-    assertEquals(Collections.singleton(times[2]), integerStatistics.getMaxInfo().timestamps);
+    assertEquals(times[2], (long) integerStatistics.getMaxInfo().timestamp);
     //    assertEquals(times[0], integerStatistics.getStartTime());
     //    assertEquals(times[4], integerStatistics.getEndTime());
     assertEquals(vals[0], (long) integerStatistics.getFirstValue());
@@ -292,9 +283,9 @@ public class IntegerStatisticsTest {
     integerStatistics.setEndTime(MaxMinUtils.maxLong(times, 0, 6));
     assertFalse(integerStatistics.isEmpty());
     assertEquals(vals[3], (long) integerStatistics.getMinInfo().val);
-    assertEquals(Collections.singleton(times[3]), integerStatistics.getMinInfo().timestamps);
+    assertEquals(times[3], (long) integerStatistics.getMinInfo().timestamp);
     assertEquals(vals[2], (long) integerStatistics.getMaxInfo().val);
-    assertEquals(Collections.singleton(times[2]), integerStatistics.getMaxInfo().timestamps);
+    assertEquals(times[2], (long) integerStatistics.getMaxInfo().timestamp);
     //    assertEquals(times[0], integerStatistics.getStartTime());
     //    assertEquals(times[5], integerStatistics.getEndTime());
     assertEquals(vals[0], (long) integerStatistics.getFirstValue());
@@ -305,9 +296,9 @@ public class IntegerStatisticsTest {
     integerStatistics.setEndTime(MaxMinUtils.maxLong(times, 0, 7));
     assertFalse(integerStatistics.isEmpty());
     assertEquals(vals[3], (long) integerStatistics.getMinInfo().val);
-    assertEquals(Collections.singleton(times[3]), integerStatistics.getMinInfo().timestamps);
+    assertEquals(times[3], (long) integerStatistics.getMinInfo().timestamp);
     assertEquals(vals[2], (long) integerStatistics.getMaxInfo().val);
-    assertEquals(Collections.singleton(times[2]), integerStatistics.getMaxInfo().timestamps);
+    assertEquals(times[2], (long) integerStatistics.getMaxInfo().timestamp);
     //    assertEquals(times[0], integerStatistics.getStartTime());
     //    assertEquals(times[6], integerStatistics.getEndTime());
     assertEquals(vals[0], (long) integerStatistics.getFirstValue());
@@ -318,9 +309,9 @@ public class IntegerStatisticsTest {
     integerStatistics.setEndTime(MaxMinUtils.maxLong(times, 0, 8));
     assertFalse(integerStatistics.isEmpty());
     assertEquals(vals[7], (long) integerStatistics.getMinInfo().val);
-    assertEquals(Collections.singleton(times[7]), integerStatistics.getMinInfo().timestamps);
+    assertEquals(times[7], (long) integerStatistics.getMinInfo().timestamp);
     assertEquals(vals[2], (long) integerStatistics.getMaxInfo().val);
-    assertEquals(Collections.singleton(times[2]), integerStatistics.getMaxInfo().timestamps);
+    assertEquals(times[2], (long) integerStatistics.getMaxInfo().timestamp);
     //    assertEquals(times[0], integerStatistics.getStartTime());
     //    assertEquals(times[7], integerStatistics.getEndTime());
     assertEquals(vals[0], (long) integerStatistics.getFirstValue());
@@ -351,9 +342,9 @@ public class IntegerStatisticsTest {
     longStatistics1.mergeStatistics(longStatistics2);
     assertFalse(longStatistics1.isEmpty());
     assertEquals(100, (long) longStatistics1.getMinInfo().val);
-    assertEquals(Collections.singleton(1000L), longStatistics1.getMinInfo().timestamps);
+    assertEquals(1000L, (long) longStatistics1.getMinInfo().timestamp);
     assertEquals(10000, (long) longStatistics1.getMaxInfo().val);
-    assertEquals(Collections.singleton(5000L), longStatistics1.getMaxInfo().timestamps);
+    assertEquals(5000L, (long) longStatistics1.getMaxInfo().timestamp);
     //    assertEquals(1000L, longStatistics1.getStartTime());
     //    assertEquals(7000L, longStatistics1.getEndTime());
     assertEquals(100L, (long) longStatistics1.getFirstValue());
@@ -372,9 +363,9 @@ public class IntegerStatisticsTest {
     longStatistics1.mergeStatistics(longStatistics2);
     assertFalse(longStatistics1.isEmpty());
     assertEquals(100, (long) longStatistics1.getMinInfo().val);
-    assertEquals(Collections.singleton(1000L), longStatistics1.getMinInfo().timestamps);
+    assertEquals(1000L, (long) longStatistics1.getMinInfo().timestamp);
     assertEquals(80000, (long) longStatistics1.getMaxInfo().val);
-    assertEquals(Collections.singleton(7000L), longStatistics1.getMaxInfo().timestamps);
+    assertEquals(7000L, (long) longStatistics1.getMaxInfo().timestamp);
     //    assertEquals(1000L, longStatistics1.getStartTime());
     //    assertEquals(7000L, longStatistics1.getEndTime());
     assertEquals(100, (long) longStatistics1.getFirstValue());
@@ -393,9 +384,9 @@ public class IntegerStatisticsTest {
     longStatistics1.mergeStatistics(longStatistics2);
     assertFalse(longStatistics1.isEmpty());
     assertEquals(10, (long) longStatistics1.getMinInfo().val);
-    assertEquals(Collections.singleton(6000L), longStatistics1.getMinInfo().timestamps);
+    assertEquals(6000L, (long) longStatistics1.getMinInfo().timestamp);
     assertEquals(10000, (long) longStatistics1.getMaxInfo().val);
-    assertEquals(Collections.singleton(5000L), longStatistics1.getMaxInfo().timestamps);
+    assertEquals(5000L, (long) longStatistics1.getMaxInfo().timestamp);
     //    assertEquals(1000L, longStatistics1.getStartTime());
     //    assertEquals(7000L, longStatistics1.getEndTime());
     assertEquals(100, (long) longStatistics1.getFirstValue());
diff --git a/tsfile/src/test/java/org/apache/iotdb/tsfile/file/metadata/statistics/LongStatisticsTest.java b/tsfile/src/test/java/org/apache/iotdb/tsfile/file/metadata/statistics/LongStatisticsTest.java
index 7b31b18..e5f8413 100644
--- a/tsfile/src/test/java/org/apache/iotdb/tsfile/file/metadata/statistics/LongStatisticsTest.java
+++ b/tsfile/src/test/java/org/apache/iotdb/tsfile/file/metadata/statistics/LongStatisticsTest.java
@@ -20,10 +20,6 @@ package org.apache.iotdb.tsfile.file.metadata.statistics;
 
 import org.junit.Test;
 
-import java.util.Collections;
-import java.util.HashSet;
-import java.util.Set;
-
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertFalse;
 import static org.junit.Assert.assertTrue;
@@ -62,9 +58,9 @@ public class LongStatisticsTest {
     longStatistics.setEndTime(2783647123649L);
     assertFalse(longStatistics.isEmpty());
     assertEquals(76074100L, (long) longStatistics.getMaxInfo().val);
-    assertEquals(Collections.singleton(2783647123649L), longStatistics.getMaxInfo().timestamps);
+    assertEquals(2783647123649L, (long) longStatistics.getMaxInfo().timestamp);
     assertEquals(76074100L, (long) longStatistics.getMinInfo().val);
-    assertEquals(Collections.singleton(2783647123649L), longStatistics.getMinInfo().timestamps);
+    assertEquals(2783647123649L, (long) longStatistics.getMinInfo().timestamp);
     //    assertEquals(2783647123649L, longStatistics.getStartTime());
     //    assertEquals(2783647123649L, longStatistics.getEndTime());
     assertEquals(76074100L, (long) longStatistics.getFirstValue());
@@ -74,9 +70,9 @@ public class LongStatisticsTest {
     longStatistics.setEndTime(2783647123650L);
     assertFalse(longStatistics.isEmpty());
     assertEquals(76074100L, (long) longStatistics.getMaxInfo().val);
-    assertEquals(Collections.singleton(2783647123649L), longStatistics.getMaxInfo().timestamps);
+    assertEquals(2783647123649L, (long) longStatistics.getMaxInfo().timestamp);
     assertEquals(40275440L, (long) longStatistics.getMinInfo().val);
-    assertEquals(Collections.singleton(2783647123650L), longStatistics.getMinInfo().timestamps);
+    assertEquals(2783647123650L, (long) longStatistics.getMinInfo().timestamp);
     //    assertEquals(2783647123649L, longStatistics.getStartTime());
     //    assertEquals(2783647123650L, longStatistics.getEndTime());
     assertEquals(76074100L, (long) longStatistics.getFirstValue());
@@ -91,9 +87,9 @@ public class LongStatisticsTest {
     longStatistics.setEndTime(2783647123656L);
 
     assertEquals(81932492L, (long) longStatistics.getMaxInfo().val);
-    assertEquals(Collections.singleton(2783647123651L), longStatistics.getMaxInfo().timestamps);
+    assertEquals(2783647123651L, (long) longStatistics.getMaxInfo().timestamp);
     assertEquals(3515802L, (long) longStatistics.getMinInfo().val);
-    assertEquals(Collections.singleton(2783647123656L), longStatistics.getMinInfo().timestamps);
+    assertEquals(2783647123656L, (long) longStatistics.getMinInfo().timestamp);
     //    assertEquals(2783647123649L, longStatistics.getStartTime());
     //    assertEquals(2783647123656L, longStatistics.getEndTime());
     assertEquals(76074100L, (long) longStatistics.getFirstValue());
@@ -138,9 +134,9 @@ public class LongStatisticsTest {
     longStatistics.setEndTime(times[0]);
     assertFalse(longStatistics.isEmpty());
     assertEquals(vals[0], (long) longStatistics.getMaxInfo().val);
-    assertEquals(Collections.singleton(times[0]), longStatistics.getMaxInfo().timestamps);
+    assertEquals(times[0], (long) longStatistics.getMaxInfo().timestamp);
     assertEquals(vals[0], (long) longStatistics.getMinInfo().val);
-    assertEquals(Collections.singleton(times[0]), longStatistics.getMinInfo().timestamps);
+    assertEquals(times[0], (long) longStatistics.getMinInfo().timestamp);
     //    assertEquals(times[0], longStatistics.getStartTime());
     //    assertEquals(times[0], longStatistics.getEndTime());
     assertEquals(vals[0], (long) longStatistics.getFirstValue());
@@ -150,12 +146,11 @@ public class LongStatisticsTest {
     longStatistics.setEndTime(times[1]);
     assertFalse(longStatistics.isEmpty());
     assertEquals(76074100L, (long) longStatistics.getMaxInfo().val);
-    Set<Long> expectedTimestamps = new HashSet<>();
-    expectedTimestamps.add(times[0]);
-    expectedTimestamps.add(times[1]);
-    assertEquals(expectedTimestamps, longStatistics.getMaxInfo().timestamps);
+
+    long expectedTimestamp = times[0];
+    assertEquals(expectedTimestamp, (long) longStatistics.getMaxInfo().timestamp);
     assertEquals(76074100L, (long) longStatistics.getMinInfo().val);
-    assertEquals(expectedTimestamps, longStatistics.getMinInfo().timestamps);
+    assertEquals(expectedTimestamp, (long) longStatistics.getMinInfo().timestamp);
     //    assertEquals(2783647123649L, longStatistics.getStartTime());
     //    assertEquals(2783647123650L, longStatistics.getEndTime());
     assertEquals(76074100L, (long) longStatistics.getFirstValue());
@@ -165,10 +160,9 @@ public class LongStatisticsTest {
     longStatistics.updateStats(vals[3], times[3]);
     longStatistics.setEndTime(times[3]);
     assertEquals(76074100L, (long) longStatistics.getMaxInfo().val);
-    expectedTimestamps.add(times[2]);
-    assertEquals(expectedTimestamps, longStatistics.getMaxInfo().timestamps);
+    assertEquals(expectedTimestamp, (long) longStatistics.getMaxInfo().timestamp);
     assertEquals(13806437L, (long) longStatistics.getMinInfo().val);
-    assertEquals(Collections.singleton(times[3]), longStatistics.getMinInfo().timestamps);
+    assertEquals(times[3], (long) longStatistics.getMinInfo().timestamp);
     //    assertEquals(times[0], longStatistics.getStartTime());
     //    assertEquals(times[3], longStatistics.getEndTime());
     assertEquals(vals[0], (long) longStatistics.getFirstValue());
@@ -181,13 +175,11 @@ public class LongStatisticsTest {
     longStatistics.setEndTime(times[7]);
 
     assertEquals(78131730L, (long) longStatistics.getMaxInfo().val);
-    assertEquals(Collections.singleton(2783647123653L), longStatistics.getMaxInfo().timestamps);
+    assertEquals(2783647123653L, (long) longStatistics.getMaxInfo().timestamp);
 
-    expectedTimestamps = new HashSet<>();
-    expectedTimestamps.add(times[6]);
-    expectedTimestamps.add(times[7]);
+    expectedTimestamp = times[6];
     assertEquals(3515802L, (long) longStatistics.getMinInfo().val);
-    assertEquals(expectedTimestamps, longStatistics.getMinInfo().timestamps);
+    assertEquals(expectedTimestamp, (long) longStatistics.getMinInfo().timestamp);
 
     //    assertEquals(times[0], longStatistics.getStartTime());
     //    assertEquals(times[7], longStatistics.getEndTime());
@@ -233,9 +225,9 @@ public class LongStatisticsTest {
     longStatistics.setEndTime(times[0]);
     assertFalse(longStatistics.isEmpty());
     assertEquals(vals[0], (long) longStatistics.getMaxInfo().val);
-    assertEquals(Collections.singleton(times[0]), longStatistics.getMaxInfo().timestamps);
+    assertEquals(times[0], (long) longStatistics.getMaxInfo().timestamp);
     assertEquals(vals[0], (long) longStatistics.getMinInfo().val);
-    assertEquals(Collections.singleton(times[0]), longStatistics.getMinInfo().timestamps);
+    assertEquals(times[0], (long) longStatistics.getMinInfo().timestamp);
     //    assertEquals(times[0], longStatistics.getStartTime());
     //    assertEquals(times[0], longStatistics.getEndTime());
     assertEquals(vals[0], (long) longStatistics.getFirstValue());
@@ -246,9 +238,9 @@ public class LongStatisticsTest {
     longStatistics.setEndTime(MaxMinUtils.maxLong(times, 0, 2));
     assertFalse(longStatistics.isEmpty());
     assertEquals(vals[1], (long) longStatistics.getMinInfo().val);
-    assertEquals(Collections.singleton(times[1]), longStatistics.getMinInfo().timestamps);
+    assertEquals(times[1], (long) longStatistics.getMinInfo().timestamp);
     assertEquals(vals[0], (long) longStatistics.getMaxInfo().val);
-    assertEquals(Collections.singleton(times[0]), longStatistics.getMaxInfo().timestamps);
+    assertEquals(times[0], (long) longStatistics.getMaxInfo().timestamp);
     //    assertEquals(times[0], longStatistics.getStartTime());
     //    assertEquals(times[1], longStatistics.getEndTime());
     assertEquals(vals[0], (long) longStatistics.getFirstValue());
@@ -259,9 +251,9 @@ public class LongStatisticsTest {
     longStatistics.setEndTime(MaxMinUtils.maxLong(times, 0, 3));
     assertFalse(longStatistics.isEmpty());
     assertEquals(vals[1], (long) longStatistics.getMinInfo().val);
-    assertEquals(Collections.singleton(times[1]), longStatistics.getMinInfo().timestamps);
+    assertEquals(times[1], (long) longStatistics.getMinInfo().timestamp);
     assertEquals(vals[2], (long) longStatistics.getMaxInfo().val);
-    assertEquals(Collections.singleton(times[2]), longStatistics.getMaxInfo().timestamps);
+    assertEquals(times[2], (long) longStatistics.getMaxInfo().timestamp);
     //    assertEquals(times[0], longStatistics.getStartTime());
     //    assertEquals(times[2], longStatistics.getEndTime());
     assertEquals(vals[0], (long) longStatistics.getFirstValue());
@@ -272,9 +264,9 @@ public class LongStatisticsTest {
     longStatistics.setEndTime(MaxMinUtils.maxLong(times, 0, 4));
     assertFalse(longStatistics.isEmpty());
     assertEquals(vals[3], (long) longStatistics.getMinInfo().val);
-    assertEquals(Collections.singleton(times[3]), longStatistics.getMinInfo().timestamps);
+    assertEquals(times[3], (long) longStatistics.getMinInfo().timestamp);
     assertEquals(vals[2], (long) longStatistics.getMaxInfo().val);
-    assertEquals(Collections.singleton(times[2]), longStatistics.getMaxInfo().timestamps);
+    assertEquals(times[2], (long) longStatistics.getMaxInfo().timestamp);
     //    assertEquals(times[0], longStatistics.getStartTime());
     //    assertEquals(times[3], longStatistics.getEndTime());
     assertEquals(vals[0], (long) longStatistics.getFirstValue());
@@ -285,9 +277,9 @@ public class LongStatisticsTest {
     longStatistics.setEndTime(MaxMinUtils.maxLong(times, 0, 5));
     assertFalse(longStatistics.isEmpty());
     assertEquals(vals[3], (long) longStatistics.getMinInfo().val);
-    assertEquals(Collections.singleton(times[3]), longStatistics.getMinInfo().timestamps);
+    assertEquals(times[3], (long) longStatistics.getMinInfo().timestamp);
     assertEquals(vals[2], (long) longStatistics.getMaxInfo().val);
-    assertEquals(Collections.singleton(times[2]), longStatistics.getMaxInfo().timestamps);
+    assertEquals(times[2], (long) longStatistics.getMaxInfo().timestamp);
     //    assertEquals(times[0], longStatistics.getStartTime());
     //    assertEquals(times[4], longStatistics.getEndTime());
     assertEquals(vals[0], (long) longStatistics.getFirstValue());
@@ -298,9 +290,9 @@ public class LongStatisticsTest {
     longStatistics.setEndTime(MaxMinUtils.maxLong(times, 0, 6));
     assertFalse(longStatistics.isEmpty());
     assertEquals(vals[3], (long) longStatistics.getMinInfo().val);
-    assertEquals(Collections.singleton(times[3]), longStatistics.getMinInfo().timestamps);
+    assertEquals(times[3], (long) longStatistics.getMinInfo().timestamp);
     assertEquals(vals[2], (long) longStatistics.getMaxInfo().val);
-    assertEquals(Collections.singleton(times[2]), longStatistics.getMaxInfo().timestamps);
+    assertEquals(times[2], (long) longStatistics.getMaxInfo().timestamp);
     //    assertEquals(times[0], longStatistics.getStartTime());
     //    assertEquals(times[5], longStatistics.getEndTime());
     assertEquals(vals[0], (long) longStatistics.getFirstValue());
@@ -311,9 +303,9 @@ public class LongStatisticsTest {
     longStatistics.setEndTime(MaxMinUtils.maxLong(times, 0, 7));
     assertFalse(longStatistics.isEmpty());
     assertEquals(vals[3], (long) longStatistics.getMinInfo().val);
-    assertEquals(Collections.singleton(times[3]), longStatistics.getMinInfo().timestamps);
+    assertEquals(times[3], (long) longStatistics.getMinInfo().timestamp);
     assertEquals(vals[2], (long) longStatistics.getMaxInfo().val);
-    assertEquals(Collections.singleton(times[2]), longStatistics.getMaxInfo().timestamps);
+    assertEquals(times[2], (long) longStatistics.getMaxInfo().timestamp);
     //    assertEquals(times[0], longStatistics.getStartTime());
     //    assertEquals(times[6], longStatistics.getEndTime());
     assertEquals(vals[0], (long) longStatistics.getFirstValue());
@@ -324,9 +316,9 @@ public class LongStatisticsTest {
     longStatistics.setEndTime(MaxMinUtils.maxLong(times, 0, 8));
     assertFalse(longStatistics.isEmpty());
     assertEquals(vals[7], (long) longStatistics.getMinInfo().val);
-    assertEquals(Collections.singleton(times[7]), longStatistics.getMinInfo().timestamps);
+    assertEquals(times[7], (long) longStatistics.getMinInfo().timestamp);
     assertEquals(vals[2], (long) longStatistics.getMaxInfo().val);
-    assertEquals(Collections.singleton(times[2]), longStatistics.getMaxInfo().timestamps);
+    assertEquals(times[2], (long) longStatistics.getMaxInfo().timestamp);
     //    assertEquals(times[0], longStatistics.getStartTime());
     //    assertEquals(times[7], longStatistics.getEndTime());
     assertEquals(vals[0], (long) longStatistics.getFirstValue());
@@ -357,9 +349,9 @@ public class LongStatisticsTest {
     longStatistics1.mergeStatistics(longStatistics2);
     assertFalse(longStatistics1.isEmpty());
     assertEquals(100L, (long) longStatistics1.getMinInfo().val);
-    assertEquals(Collections.singleton(1000L), longStatistics1.getMinInfo().timestamps);
+    assertEquals(1000L, (long) longStatistics1.getMinInfo().timestamp);
     assertEquals(10000L, (long) longStatistics1.getMaxInfo().val);
-    assertEquals(Collections.singleton(5000L), longStatistics1.getMaxInfo().timestamps);
+    assertEquals(5000L, (long) longStatistics1.getMaxInfo().timestamp);
     //    assertEquals(1000L, longStatistics1.getStartTime());
     //    assertEquals(7000L, longStatistics1.getEndTime());
     assertEquals(100L, (long) longStatistics1.getFirstValue());
@@ -378,9 +370,9 @@ public class LongStatisticsTest {
     longStatistics1.mergeStatistics(longStatistics2);
     assertFalse(longStatistics1.isEmpty());
     assertEquals(100L, (long) longStatistics1.getMinInfo().val);
-    assertEquals(Collections.singleton(1000L), longStatistics1.getMinInfo().timestamps);
+    assertEquals(1000L, (long) longStatistics1.getMinInfo().timestamp);
     assertEquals(80000L, (long) longStatistics1.getMaxInfo().val);
-    assertEquals(Collections.singleton(7000L), longStatistics1.getMaxInfo().timestamps);
+    assertEquals(7000L, (long) longStatistics1.getMaxInfo().timestamp);
     //    assertEquals(1000L, longStatistics1.getStartTime());
     //    assertEquals(7000L, longStatistics1.getEndTime());
     assertEquals(100L, (long) longStatistics1.getFirstValue());
@@ -399,9 +391,9 @@ public class LongStatisticsTest {
     longStatistics1.mergeStatistics(longStatistics2);
     assertFalse(longStatistics1.isEmpty());
     assertEquals(10L, (long) longStatistics1.getMinInfo().val);
-    assertEquals(Collections.singleton(6000L), longStatistics1.getMinInfo().timestamps);
+    assertEquals(6000L, (long) longStatistics1.getMinInfo().timestamp);
     assertEquals(10000L, (long) longStatistics1.getMaxInfo().val);
-    assertEquals(Collections.singleton(5000L), longStatistics1.getMaxInfo().timestamps);
+    assertEquals(5000L, (long) longStatistics1.getMaxInfo().timestamp);
     //    assertEquals(1000L, longStatistics1.getStartTime());
     //    assertEquals(7000L, longStatistics1.getEndTime());
     assertEquals(100L, (long) longStatistics1.getFirstValue());