【发布时间】:2016-03-19 16:22:10
【问题描述】:
我找不到元素,这是我的代码:
public static void main(String[] args) {
BufferedReader br = getFileReader("reader.csv");
ArrayList<Monitoring> col = getCollection(br);
//sort the collection on 'beginTime'
for (Monitoring x : col)
System.out.println(x.toString());
BeginTimeComparator beginTime = new BeginTimeComparator();
Collections.sort(col,beginTime);
System.out.println("Begin time:");
for (Monitoring x : col)
System.out.println(x.toString());
这是我遇到问题的部分,我不知道如何搜索以获取 endTime 2015-03-10 的对象。 顺便说一句,这是一行 cvs 数据:
UnitId;BeginTime;EndTime;Type;Min;Max;Sum
14100072;2015-03-10 07:12:20;2015-03-10 7:13:20;Gps/GpsAccuracyGyroBias;0;0;0
//find the amount of elements that were sent on 'endTime' = 2015-03-10 (just the date)
EndTimeComparator endTime = new EndTimeComparator();
String findThis = "2015-03-10";
Collections.sort(col, endTime);
for(Monitoring x : col){
if(x.getEndTime().equals(findThis)){
System.out.println("Here is 'endTime= 2015-03-10' :");
System.out.println(x.toString());
}
}
我试过了,但都没有用:
int index = Collections.binarySearch(col, findThis.toString(), null);
System.out.println("Here is 'endTime= 2015-03-10' :");
System.out.println(index);
【问题讨论】:
-
getEndTime是否也返回一个字符串? -
x.getEndTime() 返回什么?它会返回,只是日期还是像 '2015-03-10 7:13:20' 这样的时间?如果随时间返回,则条件
if(x.getEndTime().equals(findThis)){不会通过。 -
你能出示
EndTimeComparator的代码吗? -
再观察:结束时间显示为
2015-03-10 7:13:20而不是2015-03-10 07:13:20,即07而不是7。如果字符串的长度是固定的,那么你可以使用compareTo方法查找哪个时间小于或大于或等于的字符串。注意:如果日期和时间的格式为 yyyy-MM-dd HH:mm:ss,那么它可以正常工作。 -
另一方面,在 ArrayList 中搜索可能非常无效。如果您正在寻找一个 endTime,那么您可以用于优化的任何东西实际上都会更加昂贵。但是请确保您知道哪些操作在哪个集合中成本高昂,如果您有一个包含数千或数百万条记录的集合,那么无效的解决方案可能会造成严重后果。
标签: java arraylist collections