gpt4 book ai didi

java - TreeSet 的比较器无法按预期工作

转载 作者:行者123 更新时间:2023-12-01 17:22:38 24 4
gpt4 key购买 nike

我的想法是按层对一些实体(只是一些整数)进行排序。我发现有人似乎有同样的问题(我认为),但我不明白解决方案。每个实体的层存储在一个数组中。我对图层使用了枚举。

public enum Layer {
DEFAULT,
BACKGROUND,
FOREGROUND,
HUD_0,
HUD_1
}

所以我不知道我是否误解了比较器的工作方式,或者我是否只是因为实体是整数而遇到问题......

final Layer[] layers = {Layer.BACKGROUND, Layer.HUD_1, Layer.DEFAULT, Layer.DEFAULT, Layer.HUD_0, Layer.HUD_1};
TreeSet<Integer> sorted = new TreeSet<Integer>(new Comparator<Integer>() {
@Override
public int compare(Integer entity1, Integer entity2) {
//Integer layer1 = layers[entity1].ordinal();
//Integer layer2 = layers[entity2].ordinal();
//return layer1 < layer2 ? -1 : (layer1 > layer2 ? 1 : 0);
return layers[entity1].compareTo(layers[entity2]);
}
});
sorted.add(0);//bg
System.out.println(sorted.toString());
sorted.add(4);//hud0
System.out.println(sorted.toString());
sorted.add(2);//def
System.out.println(sorted.toString());
sorted.add(3);//def
System.out.println(sorted.toString());
sorted.add(1);//hud1
System.out.println(sorted.toString());
sorted.add(5);//hud1
System.out.println(sorted.toString());

这是输出:

[0]
[0, 4]
[2, 0, 4]
[2, 0, 4]
[2, 0, 4, 1]
[2, 0, 4, 1]

最后一个实际上应该是 [2, 3, 0, 4, 1, 5]

我读到 TreeSet 仅存储每个元素一次,因为它是一个 Set,但我不知道为什么它使用图层而不是我实际想要插入的实体。

最佳答案

从 TreeSet 的角度来看,如果 item1.compareTo(item2) == 0,则两个元素相等。在您的情况下,Layer.HUB_1 在数组中出现两次,并且两项将被视为相等,因此只会添加一项。

关于java - TreeSet 的比较器无法按预期工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17429956/

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