Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Why does Collections.sort() apply only for lists and not for sets?

Why does Collections.sort() apply only for Lists and not for Sets? Is there any particular reason?

like image 621
Rollerball Avatar asked Jun 26 '13 16:06

Rollerball


People also ask

Does collections sort work on a Set?

Yes, the Collections. sort methods are only for lists. You can't sort HashSet , but a TreeSet is automatically sorted as you add items, and LinkedHashSet is sorted by insertion order. Show activity on this post.

How do the sort () method of Collections class work?

How does the Sort Method in the Collection Sort Work? Whenever we need to sort the values in a collection, this “sort” method transfers control to the compare method in the class. The compare method then returns some values based on the comparison. It returns 0 if both the objects are equal.

Does collections sort work on arrays?

sort() vs Collections.sort works for arrays which can be of primitive data type also.

What sorting method does Collections sort use?

Collections sort is a method of Java Collections class used to sort a list, which implements the List interface. All the elements in the list must be mutually comparable. If a list consists of string elements, then it will be sorted in alphabetical order.


4 Answers

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 a TreeMap. The elements are ordered using their natural ordering, or by a Comparator 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 from HashSet 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)

like image 128
arshajii Avatar answered Oct 26 '22 07:10

arshajii


A Set, by definition, has no order.

like image 35
faffaffaff Avatar answered Oct 26 '22 09:10

faffaffaff


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!

like image 5
fge Avatar answered Oct 26 '22 08:10

fge


A set is not ordered. You can use SortedSet. Or you can create a List from the set and sort it.

like image 1
stinepike Avatar answered Oct 26 '22 07:10

stinepike