去除集合中自定义对象的重复值(对象的成员变量值都相同)
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();
注意
强调内容
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;
}
}
* 需求:去除集合中自定义对象的重复值(对象的成员变量值都相同)
*
* 我们按照和字符串一样的操作,发现出问题了。
* 为什么呢?
* 我们必须思考哪里会出问题?
* 通过简单的分析,我们知道问题出现在了判断上。
* 而这个判断功能是集合自己提供的,所以我们如果想很清楚的知道它是如何判断的,就应该去看源码。
* 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;
}
}
}
相关文章推荐
- LinkedList 去除集合中自定义对象的重复值(对象的成员变量值都相同)
- 去除集合中自定义对象的重复值(对象的成员变量值都相同)
- 黑马程序员—集合将自定义对象作为元素存储到ArrayList集合中,并去除重复元素。 比如:存人对象。同姓名同年龄,视为同一个人,为重复元素。
- 将自定义对象作为元素存到ArrayList集合中,并去除重复元素。
- 去除ArrayList集合中的重复自定义对象元素
- ArrayList去除集合中自定义对象元素的重复值
- 将自定义对象作为元素存到arrarylist集合中,并去除重复元素
- 集合框架(去除ArrayList集合中的重复自定义对象元素案例)
- 将自定义对象作为元素存到ArrayList集合中,并去除重复元素
- 集合框架六:ArrayList——将自定义对象作为元素存储到ArrayList中,并去除重复元素
- Java将自定义对象作为元素存到ArrayList集合中,并去除重复元素。
- 将自定义对象存入到HashSet集合中并去除重复元素
- 黑马程序员-将自定义对象最为元素存到ArrayList集合中,并去除重复元素
- 去除ArrayList集合中的重复自定义对象元素
- ArrayList去除集合中自定义对象元素的重复值
- 集合框架_去除ArrayList集合中的重复自定义对象元素案例
- 去除相同对象的集合
- List集合去除重复对象及equals()、hashCode()方法的作用
- java练习3,去除容器中自定义的重复对象
- 向HashSet集合存入对象,去除重复元素(覆写equals和hashCode方法)