将自定义对象存入到HashSet集合中并去除重复元素
2014-07-19 20:51
591 查看
|--HashSet:底层数据结构是哈希表。是线程不安全的。不同步。
HashSet是如何保证元素唯一性的呢?
是通过元素的两个方法,hashCode和equals来完成。
如果元素的HashCode值相同,才会判断equals是否为true。
如果元素的hashcode值不同,不会调用equals。
注意,对于判断元素是否存在,以及删除等操作,依赖的方法是元素的hashcode和equals方法。
//HashSet加入的对象需要重写hashCode方法和equals方法,因为对于自定义类需要提供判断怎样才算重复元素的方法。
//本例中的hashCode方法和equals方法即是用来判断student对象是否为重复对象的标准方法。
tan1....hashCode
tan2....hashCode
tan3....hashCode
tan2....hashCode
tan2...equals....tan2
true
tan2....hashCode
tan2...equals....tan2
null
name:tan1 age:20
name:tan3 age:22
HashSet是如何保证元素唯一性的呢?
是通过元素的两个方法,hashCode和equals来完成。
如果元素的HashCode值相同,才会判断equals是否为true。
如果元素的hashcode值不同,不会调用equals。
注意,对于判断元素是否存在,以及删除等操作,依赖的方法是元素的hashcode和equals方法。
//HashSet加入的对象需要重写hashCode方法和equals方法,因为对于自定义类需要提供判断怎样才算重复元素的方法。
//本例中的hashCode方法和equals方法即是用来判断student对象是否为重复对象的标准方法。
package tan; import java.util.HashSet; import java.util.Iterator; class Student{ private int age; private String name; public Student(int age, String name) { this.age = age; this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } public String getName() { return name; } public void setName(String name) { this.name = name; } @Override public String toString() { return "name:"+name+"age:"+age; } //HashSet加入的对象需要重写hashCode方法和equals方法,因为对于自定义类需要提供判断怎样才算重复元素的方法。 //本例中的hashCode方法和equals方法即是用来判断student对象是否为重复对象的标准方法。 @Override public int hashCode() { System.out.println(this.name+"....hashCode"); return name.hashCode()+age*25; } @Override public boolean equals(Object obj) { if(!(obj instanceof Student)){ return false; } Student student=(Student)obj; System.out.println(this.name+"...equals...."+student.name); return this.name.equals(student.name)&& this.age==age; } } public class HashSetTest { public static void main(String[] args) { HashSet hs=new HashSet(); hs.add(new Student(20,"tan1")); hs.add(new Student(21,"tan2")); hs.add(new Student(22,"tan3")); // hs.add(new Student(20,"tan1")); hs.add(null);//HashSet中可以添加null值 System.out.println(hs.contains(new Student(21, "tan2"))); //删除元素 hs.remove(new Student(21, "tan2")); Iterator it=hs.iterator(); while(it.hasNext()){ Object obj=it.next(); if(obj==null){ System.out.println(obj); continue; }else{ Student s=(Student)obj; System.out.println("name:"+s.getName()+" "+"age:"+s.getAge()); } } } }结果为:
tan1....hashCode
tan2....hashCode
tan3....hashCode
tan2....hashCode
tan2...equals....tan2
true
tan2....hashCode
tan2...equals....tan2
null
name:tan1 age:20
name:tan3 age:22
相关文章推荐
- 向HashSet集合存入对象,去除重复元素(覆写equals和hashCode方法)
- 黑马程序员-将自定义对象最为元素存到ArrayList集合中,并去除重复元素
- 黑马程序员—集合将自定义对象作为元素存储到ArrayList集合中,并去除重复元素。 比如:存人对象。同姓名同年龄,视为同一个人,为重复元素。
- 将自定义对象作为元素存到arrarylist集合中,并去除重复元素
- ArrayList去除集合中自定义对象元素的重复值
- 去除ArrayList集合中的重复自定义对象元素
- 去除ArrayList集合中的重复自定义对象元素
- 向ArrayList集合中存入对象,并以让集合用自己设定的方式去除重复元素!(覆写equals方法)
- 将自定义对象作为元素存到ArrayList集合中,并去除重复元素
- 集合框架六:ArrayList——将自定义对象作为元素存储到ArrayList中,并去除重复元素
- 集合框架(去除ArrayList集合中的重复自定义对象元素案例)
- ArrayList去除集合中自定义对象元素的重复值
- Java将自定义对象作为元素存到ArrayList集合中,并去除重复元素。
- 将自定义对象作为元素存到ArrayList集合中,并去除重复元素。
- 集合框架_去除ArrayList集合中的重复自定义对象元素案例
- 【java编程】Collection类之ArrayList去除自定义对象的重复元素
- 当ArrayList集合中有字符串类型,又有对象时,如何简便的去除重复元素
- 去除集合中自定义对象的重复值(对象的成员变量值都相同)
- LinkedList 去除集合中自定义对象的重复值(对象的成员变量值都相同)
- 集合框架七:HashSet——往HashSet集合中存入自定义对象