Java 与 TreeSet 相媲美

Java Comparable and TreeSet

为什么放入TreeSet的对象必须实现Comparable接口? 我正在尝试创建一个包含我自己的一些对象的 TreeSet class,但是当我尝试在集合中添加对象时抛出 ClassCastException。

TreeSet is an ordered implementation of Set. Specifically, TreeSet implements NavigableSet and SortedSet, Set.

的两个子接口

Comparable

TreeSet 的值被迭代时,它们将按照对象的 class 定义的顺序返回。当所讨论的对象具有一些自然的顺序概念时,这可能很有用 - 即某些值是 'less than' 或 'more than' 其他值(例如日期)。

在 Java 中,定义给定 class 的对象顺序的方法是让 class 实现 Comparable.

如果您不关心顺序(通常是这种情况),您可以改用 HashSet

或者,如果您关心元素 添加的顺序 (但不是它们的 'natural' 顺序),您可以使用 LinkedHashSet.

Comparator

最后,您有时可能对具有保证迭代顺序(不是添加元素的顺序)但不是自然顺序的集合感兴趣compareTo 定义的对象。发生这种情况时,您可以使用 constructor for TreeSet which takes an explicit Comparator。这个比较器定义了 specific 映射的顺序(例如迭代),这可能与自然顺序不同——如果对象有一个,它们在使用时不必这样做这个构造函数。