Java List<Object>去掉重复对象

两个list去重,

如果list里面都是基础对象的话,直接去重就好了

list1.removeAll(list2);

list2.addAll(list1);

但是如果list里面是对象的话,我们就要考虑重写list比较的方法了,list用的是equals,思路如下:


Person类

public class Person {
    private Long id;

    private String name;

    public Person(Long id, String name) {
        this.id = id;
        this.name = name;
    }

    public Long getId() {
        return id;
    }

    public void setId(Long id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

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

重写Person对象的equals()方法和hashCode()方法:

 @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (o == null || getClass() != o.getClass()) return false;

        Person person = (Person) o;

        if (!id.equals(person.id)) return false;
        return name.equals(person.name);

    }

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

下面对象去重的代码:

Person p1 = new Person(1l, "jack");
        Person p2 = new Person(3l, "jack chou");
        Person p3 = new Person(2l, "tom");
        Person p4 = new Person(4l, "hanson");
        Person p5 = new Person(5l, "胶布虫");

        List<Person> persons = Arrays.asList(p1, p2, p3, p4, p5, p5, p1, p2, p2);

        List<Person> personList = new ArrayList<>();
        // 去重
        persons.stream().forEach(
                p -> {
                    if (!personList.contains(p)) {
                        personList.add(p);
                    }
                }
        );
        System.out.println(personList);

List 的contains()方法底层实现使用对象的equals方法去比较的,其实重写equals()就好,但重写了equals最好将hashCode也重写了。

可以参见:http://stackoverflow.com/questions/30745048/how-to-remove-duplicate-objects-from-java-arraylist 
http://blog.csdn.net/growing_tree/article/details/46622579


 

 


`list<object>`是一种数据结构,通常在编程语言如Python、Java等中表示为列表(List)。这个列表可以存储任意类型的对象。如果你想要从一个 `list<object>` 中去除重复的元素,这里提供一种基本的方法。 ### Python 示例: 在Python中,你可以使用集合(set)的数据结构来轻松地去重。集合不允许重复的元素,因此将列表转换为集合再转回列表即可去除重复项。 ```python # 定义包含重复元素的列表 original_list = [1, 2, 2, 3, 4, 4, 5] # 使用set去除重复元素,并将其转回列表 unique_list = list(set(original_list)) print(unique_list) ``` 运行上述代码会输出: ```python [1, 2, 3, 4, 5] ``` ### Java 示例: 在Java中,你可以通过遍历原始列表并检查每个元素是否已经存在于一个新创建的列表中来实现去重。这种方法涉及到一些额外的操作,但是非常直接。 ```java import java.util.ArrayList; import java.util.LinkedHashSet; import java.util.List; public class Main { public static void main(String[] args) { List<Integer> originalList = new ArrayList<>(); originalList.add(1); originalList.add(2); originalList.add(2); originalList.add(3); originalList.add(4); originalList.add(4); originalList.add(5); // 创建一个新的列表用于存放唯一的元素 List<Integer> uniqueList = new ArrayList<>(new LinkedHashSet<>(originalList)); System.out.println("Unique elements are: " + uniqueList); } } ``` 运行这段代码会输出: ``` Unique elements are: [1, 2, 3, 4, 5] ``` ### 相关问题: 1. 在Python中如何高效地对大数组进行去重操作? 2. 在Java中如何保持去重后的列表顺序不变? 3. 当处理非数值型元素时,如何去重而不改变原始数据的类型?
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值