Set参考变量中的TreeSet实例

mis*_*v23 5 java set treeset

对于代码:

Set<Phone> set = new TreeSet<>();
set.add(new Phone("Harry"));
Run Code Online (Sandbox Code Playgroud)

我得到错误:

电话不能转换为java.base / java.lang.Comparable

如果引用变量是类型,为什么Phone必须实现Comparable Set

如果引用变量是TreeSet,则当然Phone必须实现class Comparable

And*_*ner 4

查看JavadocTreeSet()

构造一个新的空树集,根据其元素的自然顺序进行排序。插入集合中的所有元素都必须实现 Comparable 接口。

这些元素必须具有某种可比性,因为TreeSetSortedSet。请注意,Sets 不一定是无序的,只是Set接口未指定顺序。允许实现类定义元素的顺序。

如果要将非 Comparable 实例插入比较器(或使用非自然排序),则必须使用显式比较器调用构造函数。

Set <Phone> set = new TreeSet<>(someComparator);
Run Code Online (Sandbox Code Playgroud)