您的位置:首页 > 其它

去除集合中自定义对象的重复值(对象的成员变量值都相同)

2017-05-20 14:58 330 查看
/*

* 需求:去除集合中自定义对象的重复值(对象的成员变量值都相同)

*

* 我们按照和字符串一样的操作,发现出问题了。

* 为什么呢?

* 我们必须思考哪里会出问题?

* 通过简单的分析,我们知道问题出现在了判断上。

* 而这个判断功能是集合自己提供的,所以我们如果想很清楚的知道它是如何判断的,就应该去看源码。

* 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);
}
}


注意

强调内容

contains()方法的底层依赖的是equals()方法。

* 而我们的学生类中没有equals()方法,这个时候,默认使用的是它父亲Object的equals()方法

* Object()的equals()默认比较的是地址值,所以,它们进去了。因为new的东西,地址值都不同。

* 按照我们自己的需求,比较成员变量的值,重写equals()即可。

* 自动生成即可。

创建学生类

public class student {

private String name;

private int age;

public student(String name, int age) {

super();

this.name = name;

this.age = age;

}
/* (non-Javadoc)

* @see java.lang.Object#toString()

*/

/**

* @return the name

*/

public String getName() {

return name;

}
/**

* @param name the name to set

*/

public void setName(String name) {

this.name = name;

}
/**

* @return the age

*/

public int getAge() {

return age;

}
/**

* @param age the age to set

*/

public void setAge(int age) {

this.age = age;

}
public student() {

super();

// TODO Auto-generated constructor stub

}
/* (non-Javadoc)

* @see java.lang.Object#hashCode()

*/

@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;

}
/* (non-Javadoc)

* @see java.lang.Object#equals(java.lang.Object)

*/

@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) {

4000
if (other.name != null)

return false;

} else if (!name.equals(other.name))

return false;

return true;

}
}


}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐