本帖最后由 yan10600130 于 2013-02-28 16:25:32 编辑

解决方案 »

  1.   

    object是所有类的超类 有hashcode()方法 先比较hashcode值是否相等,若不等 就不用比较equals 否则调用equals方法去比较对象是否相同  add()方法返回相应的true 或false
      

  2.   

    1:
    判断set中是否包含某个对象 boolean contains(Object o);返回true,则说明包含这个对象,否则不包含。
    2:参考,很详细
    http://www.iteye.com/topic/257191
      

  3.   

    boolean flag=contains(Object o);
    另外感觉不用判断的,如果重复,自动忽略,比list就多了这功能,挺好用的
      

  4.   

    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;
    }
    }
      

  5.   

    两对象hashcode值相等是两对象equal的必要条件,也就是说不equal时hashcode值未必不等。