本帖最后由 孟浩然 于 2012-6-26 21:30 编辑
在毕老师的HashSet视频里面,创建了Person对象,并且把他们添加到hashset集合中去,此时要判断元素是否相同,必须要覆写对象hashcode方法和equals方法;今天了解了一下java对象池的应用,并把这个例子用对象池写了一下,有一点疑问:我用来装对象的对象池也是hashset集合,为什么在添加对象时不用再覆写hashcode方法了,是因为这里不需要用了,还是元素已经调用了而我我不知道,这个到底怎么解释?代码贴出来吧:- import java.util.*;
- class HashSetDemo_6
- {
- public static void main(String[] args)
- {
- HashSet<Person> hs=new HashSet<Person>();
- Person p1=Person.newPerson("zhangsan01",20);
- Person p2=Person.newPerson("zhangsan01",20);//不会被添加
- Person p3=Person.newPerson("zhangsan02",22);
- Person p4=Person.newPerson("zhangsan03",25);
- hs.add(p1);
- hs.add(p2);
- hs.add(p3);
- hs.add(p4);
- Iterator<Person> it=hs.iterator();
- while (it.hasNext())
- {
- Person p=it.next();
- System.out.println(p.getName()+"::"+p.getAge());
- }
- }
- }
- class Person
- {
- private String name;
- private int age;
- //创建对象池 用于存储Person对象
- private static HashSet<Person> objectPool=new HashSet<Person>();
- public Person(String name,int age)
- {
- this.name=name;
- this.age=age;
- }
- public String getName()
- {
- return name;
- }
- public int getAge()
- {
- return age;
- }
- //定义方法,用于创建Person对象
- public static Person newPerson(String name,int age)
- {
- for (Person p:objectPool )
- {
- //如果对象已经在对象池中存在,则直接返回该对象
- if(p.name.equals(name)&&p.age==age)
- return p;
- }
- //如果该对象不存在,则创建新对象,并将该对象添加到对象池中
- Person p=new Person(name,age);
- objectPool.add(p);
- return p;
- }
- }
复制代码 |