Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/unit-testing/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 用于存储带有日期的对象的集合_Java_Collections_Date - Fatal编程技术网

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

Java 用于存储带有日期的对象的集合,java,collections,date,Java,Collections,Date,我有一些带有日期参数的对象。什么样的集合最适合存储它们并在以后查询具有特定日期的对象?(如字符串或java.util.Date格式) 编辑: 我试图使用ToBubear的解决方案,但无法使其起作用。假设我使用对象列表和日期对象调用我的函数(返回Map)。接下来呢?我尝试了不同的方法,但由于NetBeans的错误,一切都变得非常糟糕: public Map<Date, List<Person>> createDateList(Date date, List<Pers

我有一些带有日期参数的对象。什么样的集合最适合存储它们并在以后查询具有特定日期的对象?(如字符串或java.util.Date格式)


编辑:

我试图使用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)