当前位置:编程学习 > JAVA >>

有关hashSet的问题

--------------------编程问答-------------------- 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值未必不等。 --------------------编程问答-------------------- 谢谢各位的解答,谢谢啦
补充:Java ,  Java SE
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,