In this tutorial, we will explore different methods to find duplicate elements in a Java array, including using nested loops, sets, streams, and hash tables. We will also discuss the time and space complexity of each method, so you can choose the most efficient one for your specific use case.
Whether you’re a beginner or an experienced Java developer, this tutorial will provide you with the knowledge and tools to efficiently find duplicate elements in your arrays. So, let’s get started!

Finding Duplicate Elements in an Array Using Nested Loops
Finding duplicate elements in a Java array is a common problem that can be solved by iterating through the array using two nested loops, an outer loop and an inner loop. The outer loop iterates over each element of the array, while the inner loop iterates over the remaining elements of the array.
However, it’s important to note that this approach has a time complexity of O(n^2), where n is the number of elements in the array. This means that as the size of the array grows, the time it takes to find duplicates increases significantly.
Another potential drawback of this approach is that it may produce duplicate output if an element appears more than twice in the array. To avoid this, we can use an ArrayList to store the duplicates as they are found, which can also help with reducing the time complexity, we will discuss this in detail later after we finish covering the nested loops method.
Here’s an example code snippet that demonstrates how to find duplicate elements in a Java array using the two nested loops approach. We’ll go over each part of the code to ensure a clear understanding of the process involved.
class FindDuplicateElements {
public static void main(String[] args) {
int[] array = new int[]{2, 4, 7, 2, 11, 5, 7, 14, 2, 22, 11, 49, 58, 14, 101, 1, 3, 205, 49, 101, 12};
for (int i = 0; i < array.length; i++) { // outer loop
for (int j = i + 1; j < array.length; j++) { // inner loop
if (array[i] == array[j]) {
System.out.println("Duplicate element found: " + array[i]);
}
}
}
}
}
Output:
Duplicate element found: 2 Duplicate element found: 2 Duplicate element found: 7 Duplicate element found: 2 Duplicate element found: 11 Duplicate element found: 14 Duplicate element found: 49 Duplicate element found: 101
- First, we define a Java class called
FindDuplicateElements. This class contains amain()method, which is the entry point for our program. - In the
main()method, we create an integer array calledarrayand initialize it with some test data. - We then start a
forloop that iterates over each element in thearray. This is the outer loop, which is controlled by the variablei. - Inside the outer loop, we start another
forloop that iterates over the remaining elements in thearray. This is the inner loop, which is controlled by the variablej. We start the inner loop from the next element after the currentiindex, which is why we initializejtoi + 1. - Inside the inner loop, we check if the current
iindex and the currentjindex are not the same, and whether their corresponding elements in the array are equal. If these conditions are met, it means that we have found a duplicate element, and we print a message to the console indicating that we have found it. - After the inner loop completes for a given
iindex, the outer loop moves on to the next index, and we repeat the process until we have compared every element in the array with every other element.
Overall, this code uses two nested for loops to compare each element in the array with all the other elements to find duplicates. The outer loop iterates through the array from the first element to the last element. The inner loop starts from the next element after the current outer loop iteration and compares it with the current outer loop element. If a duplicate is found, we print a message to the console.
In this way, if we have more than two occurrences of the same element in the array, we will get multiple outputs for that element, as we saw with the element 2 in the previous example.
To avoid this, we can use an ArrayList as we have mentioned earlier to store the duplicate elements and print them only once. Let’s try this approach:
class FindDuplicateElements {
public static void main(String[] args) {
int[] array = new int[]{2, 4, 7, 2, 11, 17, 2, 19, 7, 22, 7, 49};
List<Integer> duplicates = new ArrayList<>();
for (int i = 0; i < array.length; i++) {
for (int j = i + 1; j < array.length; j++) {
if (i != j && array[i] == array[j] && !duplicates.contains(array[i])) {
duplicates.add(array[i]);
}
}
}
System.out.println("Duplicate elements: ");
System.out.println(duplicates);
}
}
Output:
Duplicate elements: [2, 7]
- We define a new class called
FindDuplicateElements. - Within the class, we define the
mainmethod, which is the entry point for the Java program. - Inside the
mainmethod, we define an integer array calledarrayand initialize it with some values. - We also define a new
ArrayListcalledduplicatesthat will store any duplicate elements found inarray. - We start iterating over the elements of
arrayusing a nested loop. The outer loop variableigoes from 0 to the second-to-last element ofarray. - The inner loop variable
jgoes from the element after the one pointed to byito the last element ofarray. - For each pair of elements pointed to by
iandj, we check if they are equal and not already in theduplicateslist. - If they are equal and not already in the
duplicateslist, we add them to theduplicateslist. - Once we have iterated over all the elements of
array, we print out theduplicateslist.
Overall, this code is similar to the previous example, but it uses an ArrayList to store the duplicates, which allows us to avoid outputting duplicates more than once.
Note: When comparing strings in Java, it’s important to use the equals() method instead of == because strings are objects in Java, not primitive types like integers. The == operator checks for equality of memory location, which may not be what we want when comparing strings. Instead, the equals() method checks for equality of content, which is usually what we’re interested in when comparing strings.
Finding Duplicate Elements in an Array Using a Set
A set is a collection that contains no duplicate elements. This means that when we add elements to a set, any duplicates are automatically removed. We can take advantage of this property to find duplicate elements in an array by creating a set and adding each element of the array to it. If an element cannot be added to the set, it means that it is a duplicate.
Here is an example code snippet that demonstrates how to find duplicate elements in a Java array using a set:
class FindDuplicateElements {
public static void main(String[] args) {
String[] array = new String[]{"Megan", "Tom", "Mellisa", "Tom", "John", "Megan"};
Set<String> set = new HashSet<>();
for (String element : array) {
if (!set.add(element)) {
System.out.println("Duplicate element found: " + element);
}
}
}
}
Output:
Duplicate element found: Tom Duplicate element found: Megan
- First, we define a class called
FindDuplicateElementswith a main method. - Inside the main method, we create an array of strings called
arrayand initialize it with some values. - We also create an empty
HashSetcalledset. - Next, we use a for-each loop to iterate through each element in the
array. - Inside the loop, we check if the current element is already present in the
setusing theadd()method. - If the element is not present in the
set, theadd()method returnstrueand we add the element to the set. - If the element is already present in the
set, theadd()method returnsfalseand we print a message indicating that a duplicate element has been found. - Finally, the program prints the message for each duplicate element found.
This approach has a time complexity of O(n), where n is the number of elements in the array. This is much more efficient than the nested loops approach, which has a time complexity of O(n^2) for an array of size n.
However, it’s worth noting that using a set to find duplicate elements does come with a trade-off in terms of space complexity. We are creating an additional set to store the duplicate elements, which means that the space complexity of this approach is O(n) as well. For small arrays, this trade-off may not matter, but for very large arrays, it’s worth considering.
Finding Duplicate Elements in an Array Using Streams
In Java 8 and later versions, we can use the Stream API to find duplicate elements in an array. The Stream API provides an elegant and concise way to work with collections.
Here’s an example code snippet that shows how to find duplicate elements in an array using Streams:
class FindDuplicateElements {
public static void main(String[] args) {
String[] array = new String[]{"London", "Paris", "Amsterdam", "London", "New York", "Paris"};
List<String> list = Arrays.asList(array);
Set<String> duplicates = list.stream()
.filter(e -> Collections.frequency(list, e) > 1)
.collect(Collectors.toSet());
System.out.println("Duplicate elements: " + duplicates);
}
}
Output:
Duplicate elements: [London, Paris]
Here are the steps to find duplicate elements in an array using streams and the frequency() method:
- Create an array of elements.
- Convert the array to a list using the
Arrays.asList()method. - Use the
stream()method to create a stream from the list. - Use the
filter()method to keep only the elements that have a frequency greater than 1, using theCollections.frequency()method to get the frequency of each element. - Use the
distinct()method to remove duplicates from the filtered stream. - Use the
collect()method to collect the filtered stream into a list. - Print out the list of duplicate elements using the
System.out.println()method.
Using streams to find duplicate elements in an array has a time complexity of O(n), which is more efficient than the nested loop approach with a time complexity of O(n^2). However, it requires additional memory to store the map of frequencies, which can become a concern for very large arrays.
Finding Frequency of Repeated Elements in an Array Using a Hash Table
A hash table, also known as a hash map, is a data structure that stores key-value pairs. It allows for fast insertion, deletion, and retrieval of elements in constant time on average. This makes it an efficient data structure to use when finding the frequency of repeated elements in an array.
To find the frequency of repeated elements using a hash table, we can follow these steps:
- Create a hash table that maps each element in the array to its frequency count.
- Iterate through the array, and for each element:
- Check if it is already in the hash table. If it is, increment its frequency count.
- If it is not, add it to the hash table with a frequency count of 1.
- After iterating through the array, the hash table will contain the frequency count for each element.
Let’s walk through an example implementation of this approach:
public static void main(String[] args) {
int[] array = new int[] { 1, 2, 3, 2, 4, 1, 5, 1 };
// Create a hash table to store frequency counts
Map<Integer, Integer> frequencyMap = new HashMap<>();
// Iterate through the array
for (int element : array) {
// Check if the element is already in the hash table
if (frequencyMap.containsKey(element)) {
// If it is, increment its frequency count
frequencyMap.put(element, frequencyMap.get(element) + 1);
} else {
// If it is not, add it to the hash table with a frequency count of 1
frequencyMap.put(element, 1);
}
}
// Print the frequency count for each element
for (Map.Entry<Integer, Integer> entry : frequencyMap.entrySet()) {
System.out.println("Element " + entry.getKey() + " occurs " + entry.getValue() + " times.");
}
}
Output:
Element 1 occurs 3 times. Element 2 occurs 2 times. Element 3 occurs 1 times. Element 4 occurs 1 times. Element 5 occurs 1 times.
In this example, we have an array of integers with some repeated elements. We create a hash table called frequencyMap to store the frequency count of each element. Then, we iterate through the array and for each element, we check if it is already in the hash table. If it is, we increment its frequency count. If it is not, we add it to the hash table with a frequency count of 1.
After iterating through the array, the frequencyMap hash table will contain the frequency count for each element. Finally, we print out the frequency count for each element by iterating through the hash table using a for-each loop and printing out the key-value pairs.
The time complexity of this approach is O(n), where n is the number of elements in the array, since we only need to iterate through the array once. The space complexity is also O(n), since in the worst case, all elements in the array could be unique and we would need to store them all in the hash table.
Conclusion
In this tutorial, we explored different methods for finding duplicate elements in a Java array. We started with the nested loops approach, which is simple but can be slow for larger arrays. Then, we moved on to using a Set, which is faster but requires more memory. Finally, we looked at using Streams and a Hashtable data structure, which offer good performance and scalability. Each approach has its pros and cons, and the best choice depends on the specific requirements of your application.
To get the most out of Java programming, it’s essential to be familiar with different techniques and algorithms for solving common problems. I hope this tutorial has given you some useful insights and tools for finding duplicate elements in Java arrays. Make sure to visit the Java Examples page for more similar tutorials and examples.
Frequently asked questions
- Can
equals()be used with primitive types?
No,equals()is a method defined in theObjectclass, which is the parent class of all classes in Java. It’s used to compare the contents of objects for equality, not primitive types. However, there are wrapper classes in Java, such asIntegerandDouble, that allow you to use theequals()method to compare their values. - Can I use a hash table to find the frequency of repeated elements in an array of objects?
Yes, you can use a hash table to find the frequency of repeated elements in an array of objects. However, you need to make sure that the objects in the array have a valid implementation of thehashCode()andequals()methods, as these methods are used by the hash table to determine the uniqueness of objects. If the objects don’t have a valid implementation of these methods, the hash table may not work correctly. - What is the difference between a
HashMapand aHashSetin Java?
AHashMapis a key-value pair data structure that stores values based on a unique key. On the other hand, aHashSetis a data structure that only stores unique values and does not maintain any specific order. In other words, aHashMapis used to store and retrieve values using a key, while aHashSetis used to check if a value already exists in the set or not. - Can we use the
HashMapdata structure to find the frequency of elements in other data structures besides arrays?
Yes, theHashMapdata structure can be used to find the frequency of elements in other data structures besides arrays, as long as the data structure can be iterated over. For example, you could iterate over aListor aSetand use aHashMapto store the frequency of each element.