用于存储带日期的对象的集合

时间:2010-10-24 19:27:19

标签: java collections date

我有一些带有Date参数的对象。哪个集合最适合存储它们以及稍后查询具有特定日期的对象/对象? (比如以String或java.util.Date格式给出)?


编辑:

我试图使用TofuBear的解决方案,但无法使其正常工作。假设我正在调用我的函数(返回Map),其中包含一个对象列表和Date对象。接下来是什么 ?我尝试了不同的方法,但NetBeans的错误只是一切都是红色的:

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

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

5 个答案:

答案 0 :(得分:2)

如果存在具有相同日期的多重值,则可能是Map<Date, WhateverTypeYouWant>Map<Date, List<WhateverTypeYouWant>>

然后你会添加这样的东西:

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

根据评论进行编辑:

对于List版本,我使用类似这样的东西(未经内存测试......但很确定它是正确的):

List<WhateverTypeYouWant> list;

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

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

list.add(object);

答案 1 :(得分:0)

听起来像Map<Date, YourObject>(或Map<String, YourObject>,如果您愿意的话)可以胜任。

地图有不同的风格,最常用的是HashMap

答案 2 :(得分:0)

地图&lt;日期,其他&gt;,正如其他人所说的那样,但是如果您感兴趣的不只是获取与指定日期完全匹配的条目,那么您可能希望使用NavigableMap。如果没有完全匹配的话,可导航地图将允许您获得与您要搜索的内容接近的条目。

答案 3 :(得分: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()仅按Date搜索,而不是SomeObject的其他属性。

同时在Collections.binarySearch()

中查找resultIndex的含义

答案 4 :(得分:0)

在集合API中存储了属性(类似列表,链接列表)的引用地址,其中需要对原始数据类型元素进行装箱,在其对应的Wrapper类类型对象和那个对象是自动向上的to Object type class(Object类是每个Class的Super类)并且这个引用对象可以在OWN日期使用Multiple Resection传递任何其他程序(在相同或不同的Package内)(如只读,删除,更新,读取只需要一次,在列表中添加更多元素)。哪个参考对象仅用于避免多个问题。