2010-10-24 65 views
2

我有一些具有Date参数的对象。什么样的集合最适合存储它们,然后再查询具有特定日期的对象/对象? (如给出一个字符串或java.util.Date格式)?用于存储日期对象的集合


编辑:

我试图用TofuBear的解决方案,但不能使它工作。让我们说我正在调用我的函数(它返回地图)与对象列表和Date对象。接下来是什么 ?我尝试不同的方法,但一切都是从NetBeans中的错误只是血红:

public Map<Date, List<Person>> createDateList(Date date, List<Person> list){ 
    Map<Date, List<Person>> map = null; 
} 

然而,这并不能解决查询的问题,因为我是刚刚创建地图的一个对象。我需要在地图中列出所有对象(具有日期字段)及其日期。我的想法是否正确?

回答

0

听起来像Map<Date, YourObject>(或Map<String, YourObject>,如果你愿意的话)可以完成这项工作。

地图有不同的口味,最常用的是HashMap

2

可能是Map<Date, WhateverTypeYouWant>Map<Date, List<WhateverTypeYouWant>>如果有多个相同日期的数值。

,那么你会添加它们是这样的:根据注释

map.put(object.getDate(), object); 

编辑:

因为我使用这样的(未经测试从内存中列出的版本...但很肯定是正确的):

List<WhateverTypeYouWant> list; 

list = map.get(object.getDate()) 

if(list == null) 
{ 
    list = new ArrayList<WhateverTypeYouWant>(); 
    map.put(object.getDate(), list); 
} 

list.add(object); 
+0

@mastodon:如果您使用List 不要忘记创建列表。 – 2010-10-24 19:35:26

+0

你能解释一下如何使用它吗?我很挣扎,没有什么好处。 – mastodon 2010-10-24 22:30:12

0

地图<日期,其他>,正如其他人所说,但如果你是不是让一个条目兴趣了解更多与给定的日期完全匹配,那么您可能需要使用NavigableMap进行调查。如果没有完全匹配,导航地图将允许您获取与您正在搜索的内容相近的条目。

0

如果您使用Map<Date, SomeObject>与其他人所建议的一样,您将只能够进行精确搜索,并且如果您在SomeObject中更改日期,则需要手动更新地图。如果您选择使用Map<Date, List<SomeObject>>,则还需要更多的工作。

改为使用List<SomeObject>并使用Collections.binarySearch()。这需要Collection进行排序,您需要编写自定义的java.util.Comparator。

private class SomeObjectComparator implements Comparator<SomeObject> { 

    @Override 
    public int compare(SomeObject o1, SomeObject o2) { 
     // this breaks equality rule for Set 
     // do not use in Sets 
     return o1.date.compareTo(o2.date); 
    } 
} 

然后使用这样的(优选包装在辅助方法):

List<SomeObject> someList = new ArrayList<SomeObject> 
Comparator comparator = new SomeObjectComparator(); 
Collections.sort(someList, comparator); 
int resultIndex = Collections.binarySearch(someList, someSearchedObject, comparator) 

鉴于这种比较器,的binarySearch()将只由日期由SomeObject的其它性能不进行搜索。

还要查找的resultIndex含义Collections.binarySearch()

0

在侧收集API存储的属性的参考地址(像列表,链接列表),用于这需要原始数据类型元件上的拳击,在其对应包装类类型对象,并且一个对象自动向上类型为对象类型类(对象类是每个类的超类)并且此引用对象可以通过任何其他程序(内部相同或不同包)根据需要OWN日期(如只读,删除,更新,只读一次,在列表中添加更多元素)。参考对象仅用于避免多重问题。