黑马程序员技术交流社区
标题:
HashSet用法
[打印本页]
作者:
cc3441251
时间:
2015-8-22 09:01
标题:
HashSet用法
Hashset和数学中的集合的概念一样,不能往集合中放置相同的元素,而如何判断往集合中放置的元素是否相同,则是通过Object类的hashcode和equals方法来确定的,具体的判断过程为:当使用HashSet时候,hashcode方法就会调用,判断已经存储在
HashSe
中的对象的hashcode值是否和新添加的对象的hashcode值一样,如果不一致,则直接加进去,若一致,再对这个对象进行equals方法的比较,若equals方法返回的是true,则不将新对象添加进去,若是false则添加进去。(这是因为 hash code 相同的对象不一定equals方法返回ture ,简言之就是equal了hashcode一样,不equal了hashcode不一定不一样,有可能一样).
注意
:往hashset里面存的时候一定是先判断hash code 值。
package cn.itcast.HashSet;
import java.util.*;
class Person
{
private String name;
private int age;
public Person()
{
}
public Person(String name,int age)//定义有参构造函数
{
this.name=name;
this.age=age;
}
public void setName(String name)//定义修改name的方法
{
this.name=name;
}
public String getName()//定义获取name的方法
{
return this.name;
}
public void setAge()// 定义修改年龄的方法
{
this.age=age;
}
public int getAge()//定义获取年龄的方法
{
return this.age;
}
public int hashCode()//重写hashCode()方法
{
return name.hashCode()+age*39;
}
public boolean equals(Object obj)//重写equals方法
{
if(this==obj)
return true;//同一个对象放两次,直接返回true
if(!(obj instanceof Person))
throw new ClassCastException("类型错误");
Person p=(Person)obj;
return this.name.equals(p.name)&&this.age==p.age;
}
}
class HashSetDemo
{
public static void main(String[] args)
{
HashSet<Person> hs=new HashSet<Person>();
hs.add(new Person("java01",11));
hs.add(new Person("java02",22));
hs.add(new Person("java03",33));
hs.add(new Person("java04",44));
hs.add(new Person("java02",22));
Iterator<Person> it=hs.iterator();//获取迭代器对象
while(it.hasNext())
{
Person p=it.next();
System.out.println(p.getName()+"::"+p.getAge());
}
}
}
复制代码
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2