有关hashSet的问题 本帖最后由 yan10600130 于 2013-02-28 16:25:32 编辑 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 object是所有类的超类 有hashcode()方法 先比较hashcode值是否相等,若不等 就不用比较equals 否则调用equals方法去比较对象是否相同 add()方法返回相应的true 或false 1:判断set中是否包含某个对象 boolean contains(Object o);返回true,则说明包含这个对象,否则不包含。2:参考,很详细http://www.iteye.com/topic/257191 boolean flag=contains(Object o);另外感觉不用判断的,如果重复,自动忽略,比list就多了这功能,挺好用的 import java.util.*;/*|--Set:元素是无序(存入和取出的顺序不一定一致),元素不可以重复。 |--HashSet:底层数据结构是哈希表。是线程不安全的。不同步。 HashSet是如何保证元素唯一性的呢? 是通过元素的两个方法,hashCode和equals来完成。 如果元素的HashCode值相同,才会判断equals是否为true。 如果元素的hashcode值不同,不会调用equals。 注意,对于判断元素是否存在,以及删除等操作,依赖的方法是元素的hashcode和equals方法。*/class HashSetTest { public static void sop(Object obj) { System.out.println(obj); } public static void main(String[] args) { HashSet<Person> sh = new HashSet<Person>(); sh.add(new Person("张三",24)); sh.add(new Person("李四",23)); sh.add(new Person("王五",24)); sh.add(new Person("张三",60)); Iterator it = sh.iterator(); while(it.hasNext()) { Person p = (Person)it.next(); sop("姓名:"+p.getName()+":::"+"年龄:"+p.getAge()); } }}class Person{ private String name; private int age; Person(String name,int age) { this.name = name; this.age = age; } public boolean equals(Object obj) { if(!(obj instanceof Person)) return false; Person p = (Person)obj; return this.name.equals(p.name) && this.age == p.age; } public int hashCode() { return name.hashCode()+age*39; } public String getName() { return name; } public int getAge() { return age; }} 两对象hashcode值相等是两对象equal的必要条件,也就是说不equal时hashcode值未必不等。 初学线程遇到个问题,求解答。。 求助,今天在安装JDK1.6后javac运行不了? JAVA编译总是出错 8数码问题,高手指教 关于jtable创建多层表头的问题 如何从BufferedImage中获取图片大小(字节数) 动态编程之classloader JAVE加法.新手提问 if(item.getValueString()==null)不执行? 一个JAVA的编译错误!! android 开发wenservice问题(java.rmi.RemoteException cannot be resolved) HashSet HashMap Hashtable
判断set中是否包含某个对象 boolean contains(Object o);返回true,则说明包含这个对象,否则不包含。
2:参考,很详细
http://www.iteye.com/topic/257191
另外感觉不用判断的,如果重复,自动忽略,比list就多了这功能,挺好用的
/*
|--Set:元素是无序(存入和取出的顺序不一定一致),元素不可以重复。
|--HashSet:底层数据结构是哈希表。是线程不安全的。不同步。 HashSet是如何保证元素唯一性的呢? 是通过元素的两个方法,hashCode和equals来完成。
如果元素的HashCode值相同,才会判断equals是否为true。
如果元素的hashcode值不同,不会调用equals。 注意,对于判断元素是否存在,以及删除等操作,依赖的方法是元素的hashcode和equals方法。*/class HashSetTest
{
public static void sop(Object obj)
{
System.out.println(obj);
}
public static void main(String[] args)
{
HashSet<Person> sh = new HashSet<Person>(); sh.add(new Person("张三",24));
sh.add(new Person("李四",23));
sh.add(new Person("王五",24));
sh.add(new Person("张三",60)); Iterator it = sh.iterator(); while(it.hasNext())
{
Person p = (Person)it.next();
sop("姓名:"+p.getName()+":::"+"年龄:"+p.getAge()); }
}
}class Person
{
private String name;
private int age; Person(String name,int age)
{
this.name = name;
this.age = age;
}
public boolean equals(Object obj)
{
if(!(obj instanceof Person))
return false; Person p = (Person)obj; return this.name.equals(p.name) && this.age == p.age;
}
public int hashCode()
{
return name.hashCode()+age*39;
}
public String getName()
{
return name;
}
public int getAge()
{
return age;
}
}