2014-11-01 57 views
0

这是正确的吗?获取列表中最旧的时间戳Java

ArrayList<Timestamp> timeStampList = new ArrayList<Timestamp>(); 
timeStampList.add(0, new Timestamp(System.currentTimeMillis())); 

Thread.sleep(600); 

timeStampList.add(1, new Timestamp(System.currentTimeMillis())); 

Collections.sort(timeStampList); 
Timestamp tempStamp = timeStampList.get(0); 
for (Timestamp startstamp : timeStampList) 
{ 
    if (tempStamp != startstamp) 
    { 
      long diffTime = startstamp.getTime() - tempStamp.getTime(); 
      diffDays = diffTime/(1000 * 60 * 60); 

      if(diffDays > 24) 
      { 
       System.out.println(diffDays/24 +"Day" + " "+diffDays % 24 + "hours"); 
      } 
      tempStamp = startstamp; 
    } 
} 

我不知道我怎么能找到数组列表中最老的时间戳。任何意见或直接答复表示赞赏。非常感谢。目前这个代码我认为只是比较。

编辑:所以假设我没有在这个上下文中使用Collection.sort,我知道我应用了当我发布,但让我们假设我想知道如何比较并找到所有在arrayList中最老的时间戳通过for-loop。

+3

好吧,你已经对它们进行了排序,所以你的列表的下界是你最古老的。 – SnakeDoc 2014-11-01 22:52:12

+0

我是Java的新手,所以任何建议或帮助表示赞赏。最后一个意思是(self.size())是最老的时间戳吗? – 2014-11-01 22:53:42

+1

'Collections.sort'使用升序排列,因此第一个元素将是最早的元素。 – Tom 2014-11-01 22:55:54

回答

2

如果根据你的文章,你不想排序你的数据,而是想迭代你的整个Timestamp对象集合并比较这种方式,你可以使用Timestamp的after()方法,它确定在作为函数的参数提供的时间戳之后是否发生时间戳。

public Timestamp getOldestTimeStamp(ArrayList<Timestamp> timeStampList) 
{ 
    if (timeStampList != null || timeStampList.length() == 0) 
    { 
     return null; 
    } 

    Timestamp oldestTimestamp = timeStampList.get(0); 

    for (int i = 1; i < timeStampList.length(); i++) 
    { 
     if (oldestTimeStamp.after(timeStampList.get(i)) 
     { 
      oldestTimeStamp = timeStampList.get(i); 
     } 
    } 

    // oldestTimeStamp is now the oldest Timestamp in the ArrayList 

    return oldestTimeStamp; 
} 

我本可以发誓我在第一次编辑时加入了这个,但看起来好像没有。评论中的每个人都希望你使用语言的内置功能,而不是自己动手。在这种情况下,你会更适合学习使用简单的语言特性,比如Collections.sort()和Collections.min(),它们总是有效,通常比我们将要编写的代码更加高效,并且比上述的12行方法简洁得多。