gpt4 book ai didi

java - 树集比较器

转载 作者:行者123 更新时间:2023-12-01 12:15:50 25 4
gpt4 key购买 nike

我有一个 TreeSet 和一个自定义比较器。我根据库存的变化从服务器获取值

例如:如果 time=0 那么服务器将发送库存上的所有条目(未排序) 如果时间=200,那么服务器将发送时间200之后添加或删除的条目(未排序)

在客户端,我正在对条目进行排序。我的问题是哪个更有效率

1> 首先获取所有条目,然后调用 addAll 方法或者2> 逐一添加

可能有数百万个条目。

/////////已更新/////////////////////////////////////

  private static Map<Integer, KeywordInfo> hashMap = new HashMap<Integer, KeywordInfo>();
private static Set<Integer> sortedSet = new TreeSet<Integer>(comparator);

private static final Comparator<Integer> comparator = new Comparator<Integer>() {
public int compare(Integer o1, Integer o2) {
int integerCompareValue = o1.compareTo(o2);
if (integerCompareValue == 0) return integerCompareValue;
KeywordInfo k1 = hashMap.get(o1);
KeywordInfo k2 = hashMap.get(o2);
if (null == k1.getKeyword()) {
if (null == k2.getKeyword())
return integerCompareValue;
else
return -1;
} else {
if (null == k2.getKeyword())
return 1;
else {
int compareString = AlphaNumericCmp.COMPARATOR.compare(k1.getKeyword().toLowerCase(), k2.getKeyword().toLowerCase());
//int compareString = k1.getKeyword().compareTo(k2.getKeyword());
if (compareString == 0)
return integerCompareValue;
return compareString;
}
}
}
};

现在有一个事件处理程序,它为我提供了更新条目的 ArrayList,将它们添加到我的 hashMap 后,我正在调用

final Map<Integer, KeywordInfo> mapToReturn = new SubMap<Integer, KeywordInfo>(sortedSet, hashMap);

最佳答案

我认为您的瓶颈可能更多地与网络相关,而不是与 CPU 相关。一次获取所有新条目的批量操作将提高网络效率。

就您的 CPU 而言,填充 TreeSet 所需的时间在多个 add() 和 addAll() 之间变化并不一致。背后的原因是 TreeSet 依赖于 AbstractCollection 的 addAll() ( http://grepcode.com/file/repository.grepcode.com/java/root/jdk/openjdk/6-b27/java/util/AbstractCollection.java#AbstractCollection.addAll%28java.util.Collection%29 ),后者又创建一个迭代器并多次调用 add()。

所以,我对 CPU 方面的建议是:选择让代码更干净、更具可读性的方式。这可能是通过addAll()获得的。

关于java - 树集比较器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27014704/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com