Removing Duplicates from Lists in Java: Examples and Methods

Отвечено с помощью: GPT-4o-mini отJava Q&A Hub

Вопрос:

Java remove duplicates from list, please give some examples, such as List<String>, List<Item>

Ответ:

In Java, you can remove duplicates from a list using various methods. Below are examples for both List<String> and List<Item>.

Example 1: Removing Duplicates from List<String>

You can use a Set to remove duplicates since a Set does not allow duplicate elements. Here's how you can do it:

import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Set;

public class RemoveDuplicatesFromStringList {
    public static void main(String[] args) {
        List<String> stringList = new ArrayList<>();
        stringList.add("apple");
        stringList.add("banana");
        stringList.add("apple");
        stringList.add("orange");
        stringList.add("banana");

        // Remove duplicates using a Set
        Set<String> set = new HashSet<>(stringList);
        List<String> uniqueList = new ArrayList<>(set);

        System.out.println("Original List: " + stringList);
        System.out.println("List after removing duplicates: " + uniqueList);
    }
}

Example 2: Removing Duplicates from List<Item>

For a custom object like Item, you need to override the equals() and hashCode() methods in the Item class to ensure that duplicates are identified correctly. Here's an example:

import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Set;

class Item {
    private String name;
    private int id;

    public Item(String name, int id) {
        this.name = name;
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public int getId() {
        return id;
    }

    @Override
    public boolean equals(Object obj) {
        if (this == obj) return true;
        if (obj == null || getClass() != obj.getClass()) return false;
        Item item = (Item) obj;
        return id == item.id && name.equals(item.name);
    }

    @Override
    public int hashCode() {
        int result = name.hashCode();
        result = 31 * result + id;
        return result;
    }

    @Override
    public String toString() {
        return "Item{" + "name='" + name + '\'' + ", id=" + id + '}';
    }
}

public class RemoveDuplicatesFromItemList {
    public static void main(String[] args) {
        List<Item> itemList = new ArrayList<>();
        itemList.add(new Item("Item1", 1));
        itemList.add(new Item("Item2", 2));
        itemList.add(new Item("Item1", 1)); // Duplicate
        itemList.add(new Item("Item3", 3));
        itemList.add(new Item("Item2", 2)); // Duplicate

        // Remove duplicates using a Set
        Set<Item> set = new HashSet<>(itemList);
        List<Item> uniqueItemList = new ArrayList<>(set);

        System.out.println("Original List: " + itemList);
        System.out.println("List after removing duplicates: " + uniqueItemList);
    }
}

Explanation:

  1. For List<String>:

    • We create a HashSet from the list, which automatically removes duplicates.
    • We then create a new ArrayList from the HashSet to get the unique elements.
  2. For List<Item>:

    • We define an Item class with name and id attributes.
    • We override equals() and hashCode() to ensure that two Item objects are considered equal if they have the same name and id.
    • Similar to the String example, we use a HashSet to remove duplicates and then convert it back to a list.

These examples demonstrate how to effectively remove duplicates from lists in Java.