Java 用于存储带有日期的对象的集合
我有一些带有日期参数的对象。什么样的集合最适合存储它们并在以后查询具有特定日期的对象?(如字符串或java.util.Date格式)Java 用于存储带有日期的对象的集合,java,collections,date,Java,Collections,Date,我有一些带有日期参数的对象。什么样的集合最适合存储它们并在以后查询具有特定日期的对象?(如字符串或java.util.Date格式) 编辑: 我试图使用ToBubear的解决方案,但无法使其起作用。假设我使用对象列表和日期对象调用我的函数(返回Map)。接下来呢?我尝试了不同的方法,但由于NetBeans的错误,一切都变得非常糟糕: public Map<Date, List<Person>> createDateList(Date date, List<Pers
编辑: 我试图使用ToBubear的解决方案,但无法使其起作用。假设我使用对象列表和日期对象调用我的函数(返回Map)。接下来呢?我尝试了不同的方法,但由于NetBeans的错误,一切都变得非常糟糕:
public Map<Date, List<Person>> createDateList(Date date, List<Person> list){
Map<Date, List<Person>> map = null;
}
公共地图createDateList(日期,列表){
Map=null;
}
但这并不能解决查询的问题,因为我只是用一个对象创建了一个映射。我需要在地图中列出所有对象(包含日期字段)及其日期。我的想法正确吗?听起来像是一个(或者地图
,如果你愿意的话)将完成这项工作
地图有不同的风格,最常用的是。可能是Map
或Map
,如果有多个文件值具有相同的日期
然后您可以添加如下内容:
map.put(object.getDate(), object);
根据评论进行编辑:
对于列表版本,我使用如下内容(未经内存测试…但非常确定它是正确的):
列表;
list=map.get(object.getDate())
if(list==null)
{
列表=新的ArrayList();
map.put(object.getDate(),list);
}
列表。添加(对象);
映射,正如其他人所说,但是如果您对获取与给定日期完全匹配的条目感兴趣,那么您可能希望使用一个新的映射。如果没有完全匹配的条目,可导航地图将允许您获取与搜索内容接近的条目。如果您像其他人建议的那样使用map
,您将只能进行精确搜索,如果您更改某个对象内的日期,则需要手动更新地图。如果您选择使用Map
,则需要做更多的工作
而是使用List
和Collections.binarySearch()
。这需要对集合进行排序,并且需要编写自定义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);
}
}
私有类SomeObjectComparator实现Comparator{
@凌驾
公共整数比较(SomeObject o1,SomeObject o2){
//这打破了集合的相等规则
//不要成套使用
返回o1.日期比较(o2.日期);
}
}
然后像这样使用它(最好用helper方法包装):
List someList=new ArrayList
Comparator Comparator=新的SomeObjectComparator();
Collections.sort(someList、comparator);
int-resultIndex=Collections.binarySearch(someList、someSearchedObject、comparator)
给定此比较器,binarySearch()将只按日期搜索,而不按SomeObject的其他属性搜索
还可以在集合API的侧中查找
resultIndex
的含义,该集合API在其对应的包装器类类型对象中存储了属性(类似列表、链表)的引用地址,该属性需要在基元数据类型元素上装箱,并且一个对象自动升级为对象类型类(对象类是每个类的超类),该引用对象可以传递给任何其他程序(在相同或不同的包中),并在自己的日期进行多次删除(如仅读取、删除、更新、仅读取一次、在列表中添加更多元素)根据要求。对于哪个引用对象,只有在避免多个问题时才有用。@mastodon:如果你使用列表,别忘了创建这样的列表。你能解释一下如何使用它吗?我正在努力,但没有什么好结果。
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)