黑马程序员技术交流社区
标题:
关于HashSet的有关问题
[打印本页]
作者:
学习代码
时间:
2014-3-23 11:35
标题:
关于HashSet的有关问题
import java.util.*;
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== age;
}
public String getName()
{
return name;
}
public int getAge()
{
return age;
}
}
class Demo
{
public static void main(String[] args)
{
ArrayList ar = new ArrayList();
ar.add(new Person("zhangsan01",21));
ar.add(new Person("zhangsan02",22));
ar.add(new Person("zhangsan03",23));
ar.add(new Person("zhangsan03",23));
ar.add(new Person("zhangsan04",24));
ar.add(new Person("zhangsan04",24));
ar = show(ar);
Iterator it = ar.iterator();
while(it.hasNext())
{
Object obj = it.next();
Person p = (Person)obj;
System.out.println(p.getName()+";;;;"+p.getAge());
}
}
public static ArrayList show(ArrayList ar)
{
ArrayList lis = new ArrayList();
Iterator it = ar.iterator();
while(it.hasNext())
{
Object obj =it.next();
if (!lis.contains(obj))
lis.add(obj);
}
return lis;
}
}
复制代码
我想问一下,就是说如果在,哈希值相同,元素不相同的话,是可以存入的,是吧?为什么重写了Object 类中的方法,返回一个,自己定义的int 型的值,就能保证这些 对象 哈希值 是相同的啊?大神 帮忙解释一下
作者:
菠萝鱼
时间:
2014-3-23 13:29
这段代码不是HashSet集合,哈希值是根据内存地址计算出来了,如果不 Person类没有复写hashCode方法,那每次new的Person对象的哈希值都是不同的。
作者:
osully
时间:
2014-3-23 15:36
你这代码不是 Arraylist去除相同元素吗......怎么跟问的不一样
作者:
织语不如书
时间:
2014-3-23 16:13
这段代码是去除ArrayList中重复对象的啊= =ArrayList底层结构是数组,对于数组中两个对象的hashCode()是一致的就判定这俩是一个了。
你如果复写hashCode()方法,让他们都返回一个哈希值,那当然认为它们是一个玩意儿……
作者:
郝大龙0104
时间:
2014-3-23 16:15
每个对象都是继承 Object类的 所以每个类都有 hashCode这个方法的
hashCode方法 会针对不同的对象返回不同的整数 一般是通过将对象的内部地址转换成
一个整数来实现的 你每new一个对象时,每个对象都会调用hashCode来进行比较,因为内存地址不同
所以hashCode获得的值就不同 现在咱们人为的把它改成一个固定的值,当new一个对象时,就不去找内存地址
去啦 最后,咱们通过hashCode方法获得的值,都是一样的 是咱们自定义的那个值
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2