快速业务通道

JAVA提高教程(2)-认识Set集合之HashSet - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-17
了长度    set.add(obj);    System.out.println(set.size());   }   /**   * 专门针对HashSet的测试2。   */   public static void testForHashSet2() {    System.out.println("----- testForHashSet2 -----------");    HashSet<MyObject2> set = new HashSet<MyObject2>();    MyObject2 obj = null;    for (int i = 0; i < 3; i++) {     obj = new MyObject2("java2000" + i, i);     set.add(obj);     System.out.println(set.size());    }   } } class MyObject {   private int age;   private String name;   public int getAge() {    return age;   }   public void setAge(int age) {    this.age = age;   }   public String getName() {    return name;   }   public void setName(String name) {    this.name = name;   }   MyObject(String name, int age) {    this.name = name;    this.age = age;   }   public boolean equals(Object obj) {    System.out.println("equals");    if (obj == null || !(obj instanceof MyObject)) {     return false;    }    MyObject o = (MyObject) obj;    return this.age == o.age && this.name.equals(o.name);   }   public int hashCode() {    int hashCode = name.hashCode() + String.valueOf(age).hashCode();    return hashCode;   } } class MyObject2 {   private int age;   private String name;   public int getAge() {    return age;   }   public void setAge(int age) {    this.age = age;   }   public String getName() {    return name;   }   public void setName(String name) {    this.name = name;   }   MyObject2(String name, int age) {    this.name = name;    this.age = age;   }   public boolean equals(Object obj) {    System.out.println("equals");    if (obj == null || !(obj instanceof MyObject2)) {     return false;    }    MyObject2 o = (MyObject2) obj;    return this.age == o.age && this.name.equals(o.name);   }   public int hashCode() {    return 1;   } } class MyObject3 {   private int age;   private String name;   // 采用一个变量进行控制   // 一旦生成了hashCode,则不再变动   private int HASHCODE = Integer.MIN_VALUE;   public int hashCode() {    if (HASHCODE == Integer.MIN_VALUE) {     // 重新生成本类的hashCode     HASHCODE = name.hashCode() + String.valueOf(age).hashCode();    }    return HASHCODE;   } }

JAVA提高教程(2)-认识Set集合之HashSet(2)

时间:2011-04-07 csdn 老紫竹

说明,针对HashSet:

Set不允许重复

允许 null,重复的null只算一个

判断是否存在一个数据(是否重复),先判断其hashCode是否存在,若存在再逐个判断 hashCode相同的数据是否相等

判断是否相等,除了hashCode相等外,还要判断对象引用相等(==),或者 equals

如果一个对象的hashCode变动了,会造成找不到这个对象,也就出现了内存泄漏的危 险。

hashCode 方法是HashSet里面对象的关键,它的算法影响到了数据的分散和查找效率 。某个确认对象的hashCode不应该变动,避免出现内存泄漏,可以采用如下方法,来方式 属性变化造成hashCode变化

class MyObject3 {   private int age;   private String name;   // 采用

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号