有没有办法使List.addAll排序元素?需要它进行搜索

时间:2015-12-01 07:25:29

标签: java guava

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

public class Obj{
   ...fields...
   private String label; //the field the search is performed on
}

从服务调用并将其放在ArrayList中:      列出retrieveList = ..service调用...     finalList.addAll(retrievedList);

随后一些客户可以让我找到一个带有特定标签的Obj,现在搜索结果很糟糕:

for(Obj o :finalList){
     if(o.getLabel().equals(label){
       return o;
     else
        ...

该列表中有大约100,000个Obj实例,因此搜索效率根本不高。

我的想法是首先使Obj类基于标签实现Comparator,然后使addAll方法尊重比较器,从而根据label字段对对象进行排序。 随后实现像quickSort或使用一些更高效的构造,如果Guava提供任何。 你有什么想法吗?

1 个答案:

答案 0 :(得分:0)

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

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