有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java I know treeset按字典顺序打印元素,这在这里没有发生

有人能给我解释一下“obj”树集的输出吗?我知道treeset按字典顺序打印元素,这在这里是不会发生的

枚举名{ 爱丽丝、史密斯、鲍勃、琼斯 }

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

共 (1) 个答案

  1. # 1 楼答案

    您可能已经声明了Enum,如下所示:

    public enum Name {
        Alice,
        Smith,
        Bob
    }
    

    如果您看到Enum类的compareTo()方法的实现,那么它将使用ordinal枚举常量(它在枚举声明中的位置,其中初始常量被指定为零序数)

    您需要声明Enum常量,如下所示,以获得所需的结果:

    public enum Name {
        Alice,
        Bob,
        Smith
    }
    

    如果不希望修改Enum常量的顺序,则需要在创建TreeSet实例时提供Comparator,如下例所示:

    Set<Name> obj = new TreeSet<>(Comparator.comparing(Enum::name));