gpt4 book ai didi

java - 对集合性能提示列表进行排序

转载 作者:行者123 更新时间:2023-12-01 06:21:46 24 4
gpt4 key购买 nike

我有一个包含对的集合列表,我应该按照集合对键的字母顺序对列表进行排序,我当前的解决方案是通过重写 add 方法来保持列表的排序,如下面的代码。

注意:列表集合对键始终相同

(汽车,1)(汽车,1)

(熊,1)

所以我只需要获取集合的第一对键即可对列表进行排序

List<Collection<Pair<String, Integer>>> shufflingResult;

public void init() {
shufflingResult = new ArrayList<>() {
public boolean add(Collection<Pair<String, Integer>> c) {
super.add(c);
Collections.sort(shufflingResult, new Comparator<Collection<Pair<String, Integer>>>() {
@Override
public int compare(Collection<Pair<String, Integer>> pairs, Collection<Pair<String, Integer>> t1) {
return pairs.iterator().next().getKey().compareTo(t1.iterator().next().toString());
}
});
return true;
}
};
}

这是实现我所寻求的最佳性能方式吗?

最佳答案

性能是一件棘手的事情。最好的排序算法在很大程度上取决于数据的数量和类型,以及随机的程度。有些算法在数据部分排序时效果最佳,而另一些算法则适用于真正随机的数据。

一般来说,在确定工作代码的性能不够之前,请担心优化问题。首先让事情正常运转,然后确定瓶颈在哪里。它可能不是排序,而是其他东西。

Java提供了良好的通用排序算法。您将其与 Collections.sort() 一起使用。 Java中没有SortedList,but javafx.base contains a SortedList它包装提供的列表并根据实例化时提供的比较器进行排序。这将防止您必须重写 List 实现的基本行为。

虽然您的代码看起来可能有效,但这里有一些建议:

  1. 如果pairs为null,pairs.iterator().next().getKey()将抛出NPE。
  2. 如果pairs为空,pairs.iterator().next().getKey()将抛出NoSuchElementException。
  3. 如果第一个 Pair 的 key 为空,pairs.iterator().next().getKey() 将抛出 NPE。
  4. 所有这些也适用于 t1。
  5. 您正在比较pairs.iterator().next().getKey() 和t1.iterator().next().toString()。一个是该对的字符串表示形式,另一个是该对的 key 。它是否正确?

虽然您的代码可以确保这些情况永远不会发生,但有人可能会在以后修改它,从而导致令人不快的意外。您可能需要向添加方法添加验证,以确保不会发生这些情况。当参数无效时抛出 IllegalArgumentException 通常是一个好的做法。

另一个想法:由于您的 Collection 内容始终相同,并且如果没有两个 Collection 具有相同类型的 Pair,您应该能够使用 SortedMap >> 而不是一个列表。如果您按键进行比较,这种 map 将为您排序。您将使用第一对的 key 作为 map /入口 key 来 放置集合。 map 的 keySet()values()entrySet() 都将返回按排序顺序迭代的 Collections。

关于java - 对集合性能提示列表进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56654051/

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