A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

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

评分

参与人数 1技术分 +1 收起 理由
袁錦泰 + 1

查看全部评分

2 个回复

倒序浏览
如果他存的是对象的话,对象里面有很多元素,只用原本的hashcod和equals怎么能比较得出来?
回复 使用道具 举报
因为我们可能会在hashSet集合里面放很多对象 像常用的类似的 Person(String name,int age) 集合本身并不知道你要以什么方式判别对象是否相等;
如果name相同,但是age不同,这算不算同一个人呢?
或者name不同,age相同,这算不算同一个人呢?还要往里面添加吗?集合不知道
这就需要你复写equals方法给以明确;
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马