Java 有没有办法制作List.addAll排序元素?搜索时需要它
我必须修改现有代码,所述代码检索对象列表Obj: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 :
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适合您的需要。