gpt4 book ai didi

Java - 对比较器感到困惑,需要使用一个(我认为)。更多信息在里面

转载 作者:行者123 更新时间:2023-11-29 03:50:00 24 4
gpt4 key购买 nike

我创建了一个名为 Foo 的类。 Foo 有三个字段,它们都是整数:x、y 和 z。我想做一个PriorityQueue<Foo>它在不同情况下对 Foo 对象进行不同的优先级排序。例如,我可能想按 x 值、y 值或 z 确定优先级。但是直到运行时我才知道我想优先考虑哪个值。我听说您可以使用比较器以某种方式即时强加排序,我认为这在这里是完美的。

不过,我对具体如何执行此操作感到困惑。如果说我想使用比较器优先考虑 x(而不必覆盖我的 Foo 类中的 compareTo 函数),有人可以给我举个例子吗?

非常感谢。

最佳答案

比较器是一个参数化接口(interface),允许您定义如何比较参数化类型的两个实例。假设您有以下类(class)

class Foo {
int x;
int y;
int z;
}

然后定义一个比较器,根据元素的 x 值然后 y 然后 z 对元素进行排序,我们将执行以下操作

class XyzComparator implements Comparator<Foo> {
@Override
public int compare(Foo foo1, Foo foo2) {
if(foo1.x != foo2.x) {
return Integer.compare(foo1.x, foo2.x);
}
if(foo1.y != foo2.y) {
return Integer.compare(foo1.y, foo2.y);
}
return Integer.compare(foo1.z, foo2.z);
}
}

类似地,您可以定义比较器,首先根据元素的 y 值然后 x z 等比较元素最后,在运行时,您可以使用该比较器实例化一个 PriorityQueue

PriorityQueue<Foo> queue;
if(x_then_y_then_z) {
queue = new PriorityQueue<Foo>(10, new XyzComparator());
} else if (y_then_x_then_z) {
queue = new PriorityQueue<Foo>(10, new ZxyComparator());
}

有关更多信息,请查看 priority queue javadoc以及 comparator javadoc

编辑:请参阅@buritos 关于整数溢出的评论。

关于Java - 对比较器感到困惑,需要使用一个(我认为)。更多信息在里面,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9254771/

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