我的想法是按层对一些实体(只是一些整数)进行排序。我发现有人似乎有同样的问题(我认为),但我不明白解决方案。每个实体的层存储在一个数组中。我对图层使用了枚举。
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 但我不知道为什么它使用该层而不是我实际想要插入的实体。