我必须改变现有代码,所述代码检索一个对象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提供任何。 你有什么想法吗?
答案 0 :(得分:0)
提供的番石榴TreeMultiset将满足您的需求。此集合类型支持使用自定义比较器添加元素的多个值(在您的情况下,我假设多个对象可以具有相同的标签),并实现Collection接口。它也是一个有序集合,并且添加/删除/搜索操作非常有效,因为它使用树数据结构。
可以使用subMultiset方法搜索项目,该方法将返回指定范围内的所有元素。