我不明白为什么三个都一样。集合是一个接口,树集和集合是类。
public static void main(String[] args) {
String[] text = {"i", "came", "i", "saw", "i", "left"};
Set<String> s = new TreeSet<>(); // output = 4 distinct words: [came, i, left, saw]
// Collection<String>s = new TreeSet<>(); // output = 4 distinct words: [came, i, left, saw]
// TreeSet<String>s = new TreeSet<>(); // output = 4 distinct words: [came, i, left, saw]
for(String a: text)
s.add(a);
System.out.println(s.size()+" distinct words: "+s);
}
答案 0 :(得分:1)
结果是相同的,因为所有三个都使用相同的实现类TreeSet
。由于Set
和Collection
是TreeSet
类的父接口,因此您可以使用它们的引用指向TreeSet
实现。这就是多态性在OOP中的工作方式。
但是,尽管引用是Set
或Collection
的实现,但实现是类TreeSet
的实例,该类不允许重复,并根据元素对{{ 1}}界面(自然排序)。因此,在这三者中,您都发现重复项被消除了。
答案 1 :(得分:0)
这是因为在所有三种情况下,您都使用相同的实现并将其分配给其超类型。请查看polymorphism。