user785099
user785099

Reputation: 5563

questions on using hashset to define a new set

With respect to the following two different definitions of sets, what are the differences:

Set<Integer> intset = new Hashset<Integer>();

Set<Integer> intset = new Set<Integer>();

Thanks.

Upvotes: 0

Views: 475

Answers (8)

bigGuy
bigGuy

Reputation: 1744

Compiler error on line:

Set<Integer> intset = new Set<Integer>();

Upvotes: 0

java.util.Set is an interface while java.util.HashSet is an actual implementation.

Upvotes: 1

John
John

Reputation: 2425

Set is an interface that provides some abstract methods for specific Set implementations to provide. You can't initialize a Set object, the same way you can't a List. An interface is similar to a class, however everything it contains is abstract and a class can implement multiple interfaces, but only extend a single class. Also, a class can contain both abstract and concrete methods while an interface can't. Interfaces are sort of a way of dealing with multiple inheritance.

Anyway: http://download.oracle.com/javase/6/docs/api/java/util/Set.html http://download.oracle.com/javase/tutorial/java/concepts/interface.html

Upvotes: 0

Yet Another Geek
Yet Another Geek

Reputation: 4289

In Java Set is an interface and thus cannot be initiated, thus the second one is wrong.

But the actual difference in terminology is that a Set is a mathematical concept conveying to some rules (e.g. uniqueness, order non-importance). A HashSet is a technique to implement the Set concept, using a Hashtable, which makes it computationally very fast --- amortized constant time insertion, deletion and access.

Upvotes: 0

Ernest Friedman-Hill
Ernest Friedman-Hill

Reputation: 81724

The second one won't even compile. Often people ask what's the difference between these:

HashSet<Integer> intset = new Hashset<Integer>();

Set<Integer> intset = new HashSet<Integer>();

and perhaps that's what you meant to ask. The difference here is that code written using the first definition is dependent on the particular choice of Set implementation (HashSet vs. TreeSet or something else) whereas the second declaration would let you trivially change to a different implementation without modifying any other code. It's a good practice in general -- keeps you flexible.

Upvotes: 3

Ted Hopp
Ted Hopp

Reputation: 234847

Since Set is an interface, the second won't compile.

Upvotes: 4

nicholas.hauschild
nicholas.hauschild

Reputation: 42849

You cannot instantiate a Set the way you are in your second definition.

Set is an Interface, and cannot be instantiated, it simply defines a contract by which concrete implementations can follow.

You can, however, instantiate an anonymous inner class that would follow Set's interface:

Set<Integer> intSet = new Set<Integer>() {
    //need to define all set methods here...
};

Upvotes: 0

nsfyn55
nsfyn55

Reputation: 15363

You can't declare new Set its an interface. All of those(Set, Map, List) are interfaces the java.collections package. They are not directly instantiable, but require that implementations(HashSet, ArrayList, Hashmap) be supplied in the right hand side of the assignment operation.

Upvotes: 3

Related Questions