HashTest以及对象唯一性(一)

来源:互联网 发布:java如何调用rest api 编辑:程序博客网 时间:2024/06/07 19:39
package cn.cp;//尽管我们在Person类里写了equals方法,但是还是存入了两个name=liming,age=12的对象//这是为什么呢????????//因为HashSet在往里面存对象的时候,它存的是Hash值。//虽然建立的两个name=liming,age=12但是他们的hash值不一样,所以当做了不同的对象。//注意://(1)Java里一个hash值下可能有多个对象。//(2)在HashSet中在比较是否是同一个对象时,先比较的hash值,若hash值不一样那么二者肯定不是同一元素。//(3)hash值一样,再比较两个对象,若对象还一样则说明这是同一个东西,于是不再存入//所以,我们这么做根本没有用//这也就是我们常说的:一般来说重写equals()的同时总是要重写hashCode()方法import java.util.HashSet;import java.util.Iterator;class Boy1 {private int age;private String name;public Boy1(int age, String name) {super();this.age = age;this.name = name;}public int getAge() {return age;}public String getName() {return name;}@Overridepublic boolean equals(Object obj) {Boy1 b=(Boy1) obj;boolean result=this.age==b.age&&this.name.equals(b.name);return result;}@Overridepublic String toString() {return "boy1 [age=" + age + ", name=" + name + "]";}}public class HashSetTest1 {public static void main(String[] args) {      Boy1 boy1=new Boy1(12, "liming");      Boy1 boy2=new Boy1(13, "liming");      Boy1 boy3=new Boy1(12, "liming");      HashSet hashSet=new HashSet();      hashSet.add(boy1);      hashSet.add(boy2);      hashSet.add(boy3);      Iterator iterator=hashSet.iterator();      while(iterator.hasNext()){      System.out.println(iterator.next());      }}}

原创粉丝点击