有人能解释一下这里的"obj"树集的输出吗?我知道树集按字典顺序打印元素,这在这里并没有发生。
枚举名称{爱丽丝、史密斯、鲍勃、琼斯}
public class Test {
public static void main(String[] args) {
Set<Name> obj = new TreeSet<>();
obj.add(Name.Alice);
obj.add(Name.Smith);
obj.add(Name.Bob);
Set<String> set = new TreeSet<>();
set.add("Alice");
set.add("Smith");
set.add("Bob");
System.out.println("Enum set:");
for (Name d : obj) {
System.out.println(d);
}
System.out.println("nNormal tree set:");
for (String d : set) {
System.out.println(d);
}
}
}
**Output**
Enum set:
Alice
Smith
Bob
Normal tree set:
Alice
Bob
Smith
您可能已经声明了您的Enum
,如下所示:
public enum Name {
Alice,
Smith,
Bob
}
如果您看到Enum
类的compareTo()
方法的实现,则它使用枚举常量的ordinal
(其在枚举声明中的位置,其中初始常量被分配了一个序数0(。
您需要如下所示声明Enum
常量以获得所需结果:
public enum Name {
Alice,
Bob,
Smith
}
如果您不希望修改Enum
常量的序列,则需要在创建TreeSet
实例时提供Comparator
,如下例所示:
Set<Name> obj = new TreeSet<>(Comparator.comparing(Enum::name));