Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/wcf/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 有没有办法制作List.addAll排序元素?搜索时需要它_Java_Guava - Fatal编程技术网

Java 有没有办法制作List.addAll排序元素?搜索时需要它

Java 有没有办法制作List.addAll排序元素?搜索时需要它,java,guava,Java,Guava,我必须修改现有代码,所述代码检索对象列表Obj: public class Obj{ ...fields... private String label; //the field the search is performed on } 来自服务调用并将其放入ArrayList中: 列表检索列表=…服务调用。。。 finalList.addAll(retrievedList) 随后,一些客户可能会要求我查找带有特定标签的Obj,但目前的搜索很糟糕,如下所示: for(Obj o :

我必须修改现有代码,所述代码检索对象列表Obj:

public class Obj{
   ...fields...
   private String label; //the field the search is performed on
}
来自服务调用并将其放入ArrayList中: 列表检索列表=…服务调用。。。 finalList.addAll(retrievedList)

随后,一些客户可能会要求我查找带有特定标签的Obj,但目前的搜索很糟糕,如下所示:

for(Obj o :finalList){
     if(o.getLabel().equals(label){
       return o;
     else
        ...
该列表中大约有10万个Obj实例,因此搜索根本没有效率

我的想法是首先让Obj类实现一个基于标签的比较器,然后让addAll方法尊重该比较器,从而根据标签字段对对象进行排序。 随后实现类似于快速排序的功能,或者使用一些更有效的构造(如果Guava提供的话)。 你有什么想法吗?

提供的番石榴适合你的需要。此集合类型支持使用自定义比较器添加元素的多个值(在您的示例中,我假设多个对象可以具有相同的标签),并且它实现了集合接口。它也是一个排序的集合,添加/删除/搜索操作非常有效,因为它使用树数据结构


可以使用返回指定范围内所有元素的方法来搜索项目。

集合如何。排序(yourlist,new yourcomarator())?使用该列表的contains方法查找对象。您必须重写hashcode和equals。确定对象特有的“业务(主)键”(而不是数据库id),如“发票号”或“电子邮件”,并在hashcode和equals中使用它。@user3232446-他必须在每次修改列表后调用sort(更糟的是,在查询之前)。效率不高。请将其与标签一起存储在HashMap中,因为keyHashSet适合您的需要。