我有一些带有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;
}
然而,这并没有解决查询问题,因为我只是用一个对象创建一个地图。我需要在地图中列出所有对象(具有日期字段)及其日期。我的想法是否正确?
答案 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的其他属性。
中查找resultIndex
的含义
答案 4 :(得分:0)
在集合API中存储了属性(类似列表,链接列表)的引用地址,其中需要对原始数据类型元素进行装箱,在其对应的Wrapper类类型对象和那个对象是自动向上的to Object type class(Object类是每个Class的Super类)并且这个引用对象可以在OWN日期使用Multiple Resection传递任何其他程序(在相同或不同的Package内)(如只读,删除,更新,读取只需要一次,在列表中添加更多元素)。哪个参考对象仅用于避免多个问题。