Is there any practical difference between a Set and Collection in Java, besides the fact that a Collection can include the same element twice? They have the same methods.
(For example, does Set give me more options to use libraries which accept Sets but not Collections?)
edit: I can think of at least 5 different situations to judge this question. Can anyone else come up with more? I want to make sure I understand the subtleties here.
- designing a method which accepts an argument of
SetorCollection.Collectionis more general and accepts more possibilities of input. (if I'm designing a specific class or interface, I'm being nicer to my consumers and stricter on my subclassers/implementers if I useCollection.) - designing a method which returns a
SetorCollection.Setoffers more guarantees thanCollection(even if it's just the guarantee not to include one element twice). (if I'm designing a specific class or interface, I'm being nicer to my consumers and stricter on my subclassers/implementers if I useSet.) - designing a class that implements the interface
SetorCollection. Similar issues as #2. Users of my class/interface get more guarantees, subclassers/implementers have more responsibility. - designing an interface that extends the interface
SetorCollection. Very similar to #3. - writing code that uses a
SetorCollection. Here I might as well useSet; the only reasons for me to useCollectionis if I get back aCollectionfrom someone else's code, or if I have to handle a collection that contains duplicates.