关于以下两种不同的集合定义,有哪些不同之处:
Set<Integer> intset = new Hashset<Integer>();
Set<Integer> intset = new Set<Integer>();
感谢。
答案 0 :(得分:4)
由于Set
是一个接口,第二个不会编译。
答案 1 :(得分:3)
您无法声明新设置其界面。所有这些(Set,Map,List)都是java.collections包的接口。它们不是可直接实例化的,但要求在赋值操作的右侧提供实现(HashSet,ArrayList,Hashmap)。
答案 2 :(得分:3)
第二个甚至不会编译。通常人们会问这些之间有什么区别:
HashSet<Integer> intset = new Hashset<Integer>();
Set<Integer> intset = new HashSet<Integer>();
也许这就是你要问的问题。这里的区别在于使用第一个定义编写的代码依赖于Set实现的特定选择(HashSet与TreeSet或其他东西),而第二个声明可以让您在不修改任何其他代码的情况下轻松地更改为不同的实现。这是一个很好的做法 - 保持灵活性。
答案 3 :(得分:1)
java.util.Set
是一个接口,而java.util.HashSet
是一个实际的实现。
答案 4 :(得分:0)
您不能以第二个定义中的方式实例化设置。
Set是一个接口,无法实例化,它只是定义了具体实现可以遵循的契约。
但是,您可以实例化一个遵循Set的接口的匿名内部类:
Set<Integer> intSet = new Set<Integer>() {
//need to define all set methods here...
};
答案 5 :(得分:0)
在Java Set中是一个接口,因此无法启动,因此第二个是错误的。
但术语的实际区别在于Set是一个传达某些规则的数学概念(例如唯一性,顺序不重要)。 HashSet是一种使用Hashtable实现Set概念的技术,它使计算速度非常快 - 分摊常量时间插入,删除和访问。
答案 6 :(得分:0)
Set
是一个接口,它为特定的Set
实现提供一些抽象方法。您无法初始化Set
对象,就像您不能List
一样。接口类似于类,但它包含的所有内容都是抽象的,类可以实现多个接口,但只扩展一个类。此外,类可以包含抽象和具体方法,而接口则不能。接口是处理多重继承的一种方式。
反正: http://download.oracle.com/javase/6/docs/api/java/util/Set.html http://download.oracle.com/javase/tutorial/java/concepts/interface.html
答案 7 :(得分:0)
编译错误在线:
Set<Integer> intset = new Set<Integer>();