gpt4 book ai didi

java - 创建反转顺序的比较器的最佳方法

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

这似乎是一个愚蠢的问题,但我想询问以相反顺序对类 List 的可排序结构(任何类型,可以是 MyClass )进行排序的最佳方法。没有实现 Comparable

首先,从MyClass开始没有实现Comparable我想对其进行排序,我创建了一个 Comparator ,像这样:

public class MyClassComparator implements Comparator<MyClass> {
@Override
public int compare(MyClass o1, MyClass o2) {
return (o1.getMyField()).compareTo(o2.getMyField());
}
}

当然,这会根据 MyClass.MyField 的自然顺序对 MyClass 对象进行排序。但我想要相反的顺序。

我当然可以在 compare(MyClass o1, MyClass o2) 中硬编码相反的顺序方法。类似的东西

if (o1.getMyField()).compareTo(o2.getMyField()) > 0 return -1;
if (o1.getMyField()).compareTo(o2.getMyField()) < 0 return 1;
return 0;

另一种选择是按照我最初的建议保留 MyClassComparator 的代码,并使用 public static <T> Comparator<T> reverseOrder(Comparator<T> cmp)来自java.util.Collections传递 MyClassComparator 的实例并获得反向比较器。

第三种选择,我认为是错误的,可能是对我的 LinkedList<MyClass> 进行排序。使用自然顺序比较器并从最后到第一个获取元素。 LinkedList是一个双向链表,所以它应该完美地处理这个问题。问题是我总是必须得到一个特定的 Iterator而不是仅仅使用 for each循环(次要),当然,我最初想对任何可排序结构进行排序,并且我不能保证它将是一个双向链表或任何能够很好地以相反顺序迭代它的东西。

考虑到我非常确定(不可能 100% 确定)我不会使用 MyClass 的自然顺序对象,只是相反的顺序,获得反向比较器的最佳方法是什么?

谢谢。

最佳答案

为了避免反转数组的开销,使用比较器是正确的方法。如果您要比较的类实现了 Comparable,您只需颠倒比较的顺序即可。 obj2.compareTo(obj1)。一种可视化的方法是将这两个对象视为整数,并将compareTo视为减去它们。

关于java - 创建反转顺序的比较器的最佳方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24400175/

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