Reputation: 13108
Why does Collections.sort()
apply only for List
s and not for Set
s? Is there any particular reason?
Upvotes: 8
Views: 3892
Reputation: 129517
Most (but not all) Set
implementations do not have a concept of order, so Collections.sort
does not support them as a whole. If you want a set with a concept of order, you can use something like a TreeSet
:
A
NavigableSet
implementation based on aTreeMap
. The elements are ordered using their natural ordering, or by aComparator
provided at set creation time, depending on which constructor is used.
Or a LinkedHashSet
:
Hash table and linked list implementation of the
Set
interface, with predictable iteration order. This implementation differs fromHashSe
t in that it maintains a doubly-linked list running through all of its entries. This linked list defines the iteration ordering, which is the order in which elements were inserted into the set (insertion-order)
Upvotes: 9
Reputation: 121750
A Set
is not a List
. While a List
, by contract, is supposed to retain insertion order (otherwise, methods such as .get(someindex)
would not make any sense), this is not the case for a Set
. You have no method to get an element at a particular index in a Set
! Neither do you have methods to insert at a particular position etc.
More specifically, the ordering of Set
is undefined; however, implementations of Set
can add ordering constraints.
For instance:
LinkedHashSet
retains insertion ordering;TreeSet
maintains natural ordering of its elements, either because its elements implement Comparable
, or because you supply a Comparator
.If you sorted a LinkedHashSet
, you would break its insertion ordering guarantee!
Upvotes: 5
Reputation: 54692
A set is not ordered. You can use SortedSet. Or you can create a List from the set and sort it.
Upvotes: 1
Reputation: 7940
List is an ordered set of elements while Set is not which implies that none of Set elements will have any sequence number. So you can't sort it.
Upvotes: 0