本帖最后由 meifage 于 2011-08-14 13:10:10 编辑

解决方案 »

  1.   

    如果不用到Set时,不用重写这两个的,我们知道Set中的元素不能有重的,那么什么叫重复的元素呢?如果说不同的对象就是不重复的,那么你可以试一下:
    Set set = HashSet();
    String str1 = new String("hello");
    String str2 = new String("world");set.add(str1);
    set.add(str2);
    System.out.println(set.size());str1与str2是不同的对象,当我们往set中放入时,如果是不同的对象就是不重复的,那么set中就有两个元素,然而我们打印set时,里面只有一个元素。当然是不是同一个对象是set判断元素是否重复的一个条件。其实set判断是不是重复的对象,它首先要看如果两个对象的hashcode的值不一样,那么就是不同的对象,两个都可以存入,如果hashcode的值是一样的那么,还要调用两个对象的equals方法,如果返回true,那么这两个元素就重复了。所以当我们要放入元素到set中的时候,我们就要同时重写hashCode() ,和equals()方法。来共同确定是不是重复的元素。比如下面这个例子:
    package com.cn;import java.util.HashSet;public class HashSetTest {
    public static void main(String[] args) {
    HashSet<Student> set = new HashSet<Student>();
    Student s1 = new Student("zhangsan");
    Student s2 = new Student("zhangsan");
    set.add(s1);
    set.add(s2);
    System.out.println(set);
    }
    }
    class Student {
    String name;
    Student(String name) {
    this.name = name;
    }
    public int hashCode() {
    return this.name.hashCode();
    }
    public boolean equals(Object  obj) {
    if (this == obj) {
    return true;
    }
    if (null != obj && obj instanceof Student) {
    Student s = (Student)obj;
    if (name.equals(s.name)) {
    return true;
    }
    }

    return false;
    }

    我们的目的是,如果名字一样了,在集合中就算是重复的对象了。
      

  2.   

    找你的方法的话,如果是要放到集合中,那么如果不重写hashCode方法,那么这两个对象都可以放到集合中去。尽管我们希望看到的是这两个对象是重复的。
      

  3.   

    API中说的是协定,什么叫协定?就是一个约定,不遵守这个约定就有可能出问题,如使用hashMap,hashset时
      

  4.   

    lz这代码只要重写equals()就可以了。。
      

  5.   

    一般情况下前面带Hash的重写,像Hashset,HashMap等等,因为它们是以哈希表实现的,涉及到一个冲突解决问题,所以要重写hashcode,可以去看看数据结构