这些TreeSet声明之间的区别

时间:2015-11-11 10:06:50

标签: java set treeset

所以我必须在我的代码中使用TreeSet

作为TreeSet<E> extends AbstractSet<E> implements NavigableSet<E>, Cloneable, java.io.Serializable

interface NavigableSet<E> extends SortedSet<E> which extends Set<E>

我可以使用这三个声明中的任何一个:

NavigableSet<String> myTreeSet= new TreeSet<>();
SortedSet<String> myTreeSet= new TreeSet<>();
Set<String> myTreeSet= new TreeSet<>();

我知道我将只能访问我在声明中使用的接口所暴露的那些方法。是否有其他理由考虑选择TreeSet的特定声明?

4 个答案:

答案 0 :(得分:4)

它基本上是你允许他人(或你自己)使用的,正如你所说的那样。您希望与TreeSet一起使用的其他方法可能取决于实际声明。所以可能有一个方法需要一个SortedSet,但是当你将TreeSet定义为Set时,它将无法继续

答案 1 :(得分:0)

您应该使用您喜欢的任何界面进行编程。 但是,差异 对于您正在编程的界面 。我的意思是,编程到接口(声明类型)而不是实际的TreeSet集合。

以下是解释Panel的最佳答案。

答案 2 :(得分:0)

请不要做出初步决定。如果您不需要NavigableSet的方法,请不要使用它。只需使用Set<String>

答案 3 :(得分:0)

作为指导规则,始终选择最可能的顶级类型,因为这允许从客户端代码到具体实现的更大分离。大多数情况下,调用代码知道使用哪个实现并不重要,您只想提供不暴露它的行为。说,有时你会觉得需要更多的控制,然后你应该通过接口层次结构,直到你找到必要的控制级别,但这应该是例外,而不是规则