This Java tutorial helps you understand the usage of the Collections utility class for ordering and manipulating elements in a List collection.
The java.util.Collections class provides reusable functionalities that operation on collections such as changing the order of list elements and changing the content of a list. These are grouped into “generic algorithms” category. In this article, we help you understand how to use these functionalities with code examples.
The functions in this group allow us to reverse, rotate, permute, sort and swap elements in a list.
Method:
Code example:
List<String> listFruits = Arrays.asList("Orange", "Apple", "Banana", "Lemon", "Grape", "Cherry", "Coconut"); System.out.println("Before reverse:\n " + listFruits); Collections.reverse(listFruits); System.out.println("After reverse:\n " + listFruits);
Output:
Before reverse: [Orange, Apple, Banana, Lemon, Grape, Cherry, Coconut] After reverse: [Coconut, Cherry, Grape, Lemon, Banana, Apple, Orange]
The following method rotates the elements in the specified list by the specified distance:
Code example:
List<Integer> listNumbers = Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8, 9); System.out.println("Before rotate:\n " + listNumbers); Collections.rotate(listNumbers, 3); System.out.println("After rotate:\n " + listNumbers);
Output:
Before rotate: [1, 2, 4, 5, 6, 7, 8, 9] After rotate: [7, 8, 9, 1, 2, 3, 4, 5, 6]
You can use this method in conjunction with the subList() method to rotate only a range of elements in the list, while other elements remain unchanged. For example:
List<Integer> listNumbers = Arrays.asList(1, 2, 4, 5, 6, 7, 8, 9); System.out.println("Before rotate:\n " + listNumbers); Collections.rotate(listNumbers.subList(3, 6), 2); System.out.println("After rotate:\n " + listNumbers);
Output:
Before rotate: [1, 2, 3, 4, 5, 6, 7, 8, 9] After rotate: [1, 2, 3, 5, 6, 4, 7, 8, 9]
The following methods permute the specified list:
The former method permutes a list using a default source of randomness, whereas the latter uses the specified source of randomness.
Code example:
List<Integer> listNumbers = Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8, 9); System.out.println("Before shuffle:\n " + listNumbers); Collections.shuffle(listNumbers); System.out.println("After shuffle:\n " + listNumbers);
Output:
Before shuffle: [1, 2, 3, 4, 5, 6, 7, 8, 9] After shuffle: [7, 2, 1, 6, 8, 4, 9, 5, 3]
The following method sorts the specified list into ascending order, according to the natural ordering of its elements (all elements must implement the Comparableinterface):
Note that the specified list must be modifiable, and the implementation in JDK uses mergesort algorithm.
Code example:
List<String> listNames = Arrays.asList("Tim", "Anne", "Dave", "Jean", "John", "Peter", "Carol"); System.out.println("Before sort: " + listNames); Collections.sort(listNames); System.out.println("After sort: " + listNames);
Output:
Before sort: [Tim, Anne, Dave, Jean, John, Peter, Carol] After sort: [Anne, Carol, Dave, Jean, John, Peter, Tim]
For a comprehensive code examples about sorting, see the article: Sorting List Collections Examples
The following method swaps the elements at the specified positions in the specified list:
Code example:
List<String> listCountries = Arrays.asList("USA", "Japan", "UK", "France", "Canada", "Singapore"); System.out.println("Before swap: " + listCountries); Collections.swap(listCountries, 1, 5); System.out.println("After swap: " + listCountries);
Output:
Before swap: [USA, Japan, UK, France, Canada, Singapore] After swap: [USA, Singapore, UK, France, Canada, Japan]
The methods in this group allow us to replace elements in a list.
The following method copies all of the elements from the source list (src) to the destination list (dest):
The copied elements replace the elements in the destination list at the same index. Note that the destination list must be at least as long as the source list. If it is longer, the remaining elements in the destination list are unaffected.
Code example:
List<Integer> source = Arrays.asList(2, 4, 6, 8, 10); List<Integer> dest = Arrays.asList(1, 3, 5, 7, 9, 11, 13, 15); System.out.println("dest before copy: " + dest); Collections.copy(dest, source); System.out.println("dest after copy: " + dest);
Output:
dest before copy: [1, 3, 5, 7, 9, 11, 13, 15] dest after copy: [2, 4, 6, 8, 10, 11, 13, 15]
The following method replaces all of the elements of the specified list with the specified element:
Code example:
List<Integer> listNumbers = Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8, 9); System.out.println("Before fill:\n " + listNumbers); Collections.fill(listNumbers, 0); System.out.println("After fill:\n " + listNumbers);
Output:
Before fill: [1, 2, 3, 4, 5, 6, 7, 8, 9] After fill: [0, 0, 0, 0, 0, 0, 0, 0, 0]
The following method replaces all occurrences of one specified value in the specified list with another:
Code example:
List<String> listLetters = Arrays.asList("h", "e", "l", "l", "o", "w", "o", "r", "l", "d"); System.out.println("Before replace:\n " + listLetters); Collections.replaceAll(listLetters, "l", "L"); System.out.println("After replace:\n " + listLetters);
Output:
Before replace: [h, e, l, l, o, w, o, r, l, d] After replace: [h, e, L, L, o, w, o, r, L, d]