package day16_ArrayList;
/*
* 学生类:
* 成员变量:姓名、年龄
* 成员方法
* 构造方法
*
* */
public class Student {
private String name;
private int age;
//快捷键
//alt+shift+s+o
//alt+shift+s+r
//alt+shift+s+c
//alt+shift+equals重写判断方法
public Student() {
super();
// TODO Auto-generated constructor stub
}
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;
}
@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result + age;
result = prime * result + ((name == null) ? 0 : name.hashCode());
return result;
}
@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 day16_ArrayList;
import java.util.ArrayList;
import java.util.Iterator;
/*
* 需求:去除集合中自定义对象的重复值(对象的成员变量值都相同)
*
* 我们按照和字符串一样的操作,发现出问题了。
* 为什么呢?
* 我们必须思考哪里会出问题?
* 通过简单分析,我们知道问题出现在了判断上。
* 而这个判断功能是集合自己提供的,所以我们想很清楚的知道它是如何判断的,就应该去看源码
* contains()方法的底层依赖的是equals方法
* 而我们学生类中没有equals方法,这个时候,默认使用的是它父亲Object和equals方法
* Object()的equals默认比较的是地址值,所以,他们进去了,因为new的东西,地址值不同。
* 按照我们自己的需求,比较成员变量的值,重写equals即可。
* 自动生成即可。
*/
public class ArrayListTest3 {
public static void main(String[] args) {
// TODO Auto-generated method stub
// 创建集合对象
ArrayList array = new ArrayList();
// 创建学生对象
Student s1 = new Student("林青霞", 21);
Student s2 = new Student("林志玲", 40);
Student s3 = new Student("凤姐", 32);
Student s4 = new Student("芙蓉姐姐", 48);
Student s5 = new Student("翠花", 16);
Student s6 = new Student("林青霞", 21);
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 i = 0; i < newArray.size(); i++) {
Student s = (Student) newArray.get(i);
System.out.println(s.getName()+"---"+s.getAge());
}
}
}