我知道树集按字典顺序打印元素,这在这里并没有发生



有人能解释一下这里的"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));

相关内容

最新更新