黑马程序员技术交流社区

标题: HashSet集合本身重复的添加不进去?为什么。。。。还要比较 [打印本页]

作者: 我能驾驭住    时间: 2012-6-4 10:55
标题: HashSet集合本身重复的添加不进去?为什么。。。。还要比较
package Demo.collection;

import java.util.*;

import javax.swing.SingleSelectionModel;

public class HashSetDemo {

        /**
         * @param args
         */
        public static void main(String[] args) {
                // TODO Auto-generated method stub
                HashSet hs = new HashSet();
                hs.add(new Person("lisi", 14));
                hs.add(new Person("zhangsan", 17));
                hs.add(new Person("zhaoliu", 19));
                hs.add(new Person("lisi", 14));
                hs=SingleElement(hs);
                Iterator it = hs.iterator();
                while (it.hasNext()) {
                        Person p=(Person)it.next();
                        System.out.println(p.getName()+p.getAge());
                }
        }

        private static HashSet SingleElement(HashSet hs) {
                // TODO Auto-generated method stub
                HashSet new1=new HashSet();
                Iterator it = hs.iterator();
                while (it.hasNext()) {
                        Person obj = (Person) it.next();
                        if (! new1.contains(obj)) {
                                new1.add(obj);
                        }
                }
                return new1;
        }
}
class Person{
        private String name;
        private int age;
        public Person(String name, int age) {
                super();
                this.name = name;
                this.age = age;
        }
        public int hashCode() {
                return name.hashCode()+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 String getName() {
                return name;
        }
        public void setName(String name) {
                this.name = name;
        }
        public int getAge() {
                return age;
        }
        public void setAge(int age) {
                this.age = age;
        }
}
作者: 林豪    时间: 2012-6-4 11:19
如果他存的是对象的话,对象里面有很多元素,只用原本的hashcod和equals怎么能比较得出来?
作者: 胡团乐    时间: 2012-6-4 12:14
因为我们可能会在hashSet集合里面放很多对象 像常用的类似的 Person(String name,int age) 集合本身并不知道你要以什么方式判别对象是否相等;
如果name相同,但是age不同,这算不算同一个人呢?
或者name不同,age相同,这算不算同一个人呢?还要往里面添加吗?集合不知道
这就需要你复写equals方法给以明确;




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2