如何用arrayList不重复的存储实体类

package cn.itcast_04;


public class Student {
private String name;
private int age;


public Student() {
super();
}


public Student(String name, int age) {
super();
this.name = name;
this.age = age;
}


public String getName() {
return name;
}


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


public int getAge() {
return age;
}


public void setAge(int age) {
this.age = age;
}




//重写equals方法

@Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
Student other = (Student) obj;
if (age != other.age)
return false;
if (name == null) {
if (other.name != null)
return false;
} else if (!name.equals(other.name))
return false;
return true;
}




}


package cn.itcast_04;


import java.util.ArrayList;
import java.util.Iterator;


/*
 * 需求:去除集合中自定义对象的重复值(对象的成员变量值都相同)
 * 
 * 我们按照和字符串一样的操作,发现出问题了。
 * 为什么呢?
 * 我们必须思考哪里会出问题?
 * 通过简单的分析,我们知道问题出现在了判断上。
 * 而这个判断功能是集合自己提供的,所以我们如果想很清楚的知道它是如何判断的,就应该去看源码。
 * contains()方法的底层依赖的是equals()方法。
 * 而我们的学生类中没有equals()方法,这个时候,默认使用的是它父亲Object的equals()方法
 * Object()的equals()默认比较的是地址值,所以,它们进去了。因为new的东西,地址值都不同。
 * 按照我们自己的需求,比较成员变量的值,重写equals()即可。
 * 自动生成即可。
 */
public class ArrayListDemo3 {
public static void main(String[] args) {
// 创建集合对象
ArrayList array = new ArrayList();


// 创建学生对象
Student s1 = new Student("林青霞", 27);
Student s2 = new Student("林志玲", 40);
Student s3 = new Student("凤姐", 35);
Student s4 = new Student("芙蓉姐姐", 18);
Student s5 = new Student("翠花", 16);
Student s6 = new Student("林青霞", 27);
Student s7 = new Student("林青霞", 18);


// 添加元素
array.add(s1);
array.add(s2);
array.add(s3);
array.add(s4);
array.add(s5);
array.add(s6);
array.add(s7);


// 创建新集合
ArrayList newArray = new ArrayList();


// 遍历旧集合,获取得到每一个元素
Iterator it = array.iterator();
while (it.hasNext()) {
Student s = (Student) it.next();


// 拿这个元素到新集合去找,看有没有
if (!newArray.contains(s)) {
newArray.add(s);
}
}


// 遍历新集合
for (int x = 0; x < newArray.size(); x++) {
Student s = (Student) newArray.get(x);
System.out.println(s.getName() + "---" + s.getAge());
}
}
}





  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
你可以使用以下步骤来实现Java实体类List的去重并将其余值相: 1. 首先,创建一个新的空列表,用于存储去重后的实体类对象。 2. 遍历原始列表中的每个实体类对象。 3. 对于每个实体类对象,检查新列表中是否已经存在相同的对象。可以通过重写实体类的`equals()`和`hashCode()`方法来进行对象的比较。 4. 如果新列表中不存在相同的对象,则将当前实体类对象添到新列表中。 5. 如果新列表中已存在相同的对象,则找到该对象并将其余值相。这取决于你的实体类具体的属性,可以根据需求进行相应的操作。 6. 最后,新列表中存储的就是去重后并进行了值相操作的实体类对象。 下面是一个示例代码,假设实体类为`Entity`,其中包含属性`id`和`value`: ```java import java.util.ArrayList; import java.util.HashSet; import java.util.List; import java.util.Set; public class Main { public static void main(String[] args) { List<Entity> originalList = new ArrayList<>(); // 假设原始列表中存在一些重复实体类对象 originalList.add(new Entity(1, 10)); originalList.add(new Entity(2, 20)); originalList.add(new Entity(3,30)); originalList.add(new Entity(1, 5)); // 与第一个对象的id相同 List<Entity> resultList = new ArrayList<>(); Set<Integer> idSet = new HashSet<>(); for (Entity entity : originalList) { if (!idSet.contains(entity.getId())) { idSet.add(entity.getId()); resultList.add(entity); } else { for (Entity resultEntity : resultList) { if (resultEntity.getId() == entity.getId()) { resultEntity.setValue(resultEntity.getValue() + entity.getValue()); break; } } } } // 输出去重后并进行值相的结果 for (Entity resultEntity : resultList) { System.out.println(resultEntity.getId() + " " + resultEntity.getValue()); } } } class Entity { private int id; private int value; public Entity(int id, int value) { this.id = id; this.value = value; } // 根据需要重写equals()和hashCode()方法 public int getId() { return id; } public void setId(int id) { this.id = id; } public int getValue() { return value; } public void setValue(int value) { this.value = value; } } ``` 这个示例代码会输出以下结果: ``` 1 15 2 20 3 30 ``` 其中,id为1的实体类对象的value值相为15。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值