HashSet详解
2016-04-22 14:21
411 查看
HashSet中不能存放相同的元素这点大家都知道,对于仅存放基本类型的Set集合不会有很大困难理解,但是当Set中存放的是对象引用时,就得去重写该对象的hashCode和equals方法了,并且Set集合就是依据这两个方法来判断存入引用的一致性。
由此可知,当试图把某个类的对象当成HashCode的Key,或者试图将这个类的对象放入HashSet中保存时,重写这个类的equals(Object obj)方法和hashCode()方法很重要,并且这两个方法的返回值必须一致。当该类的两个hashCode()返回值相同时,他们通过equals方法比较也应该保持一致。通常来说,所有参与计算hashCode()返回值的关键属性,都应该用于作为equals()比较的标准。
import java.util.HashSet; public class HashSetTest { /** * @param args */ public static void main(String[] args) { // TODO Auto-generated method stub HashSet<Name> set = new HashSet<Name>(); set.add(new Name("abc", "123")); set.add(new Name("abc", "456")); // 由运行结果可以得知,由于重写的hashCode和equals方法是依据first来判断对象是否相等 //所以即使添加的两个变量last不同也不能添加进set中 System.out.println(set); } } class Name { private String first; private String last; public Name(String first, String last) { this.first = first; this.last = last; } // 重写Name类的equals方法,依据first实例变量判断 @Override public boolean equals(Object o) { if (this == o) { return true; } if (o == null) { return false; } if (o.getClass() != getClass()) { return false; } Name other = (Name) o; return first.equals(other.first); } // 重写Name类的hashCode方法,依据first实例变量判断 @Override public int hashCode() { // TODO Auto-generated method stub return first.hashCode(); } @Override public String toString() { return "Name [first=" + first + ", last=" + last + "]"; } }
由此可知,当试图把某个类的对象当成HashCode的Key,或者试图将这个类的对象放入HashSet中保存时,重写这个类的equals(Object obj)方法和hashCode()方法很重要,并且这两个方法的返回值必须一致。当该类的两个hashCode()返回值相同时,他们通过equals方法比较也应该保持一致。通常来说,所有参与计算hashCode()返回值的关键属性,都应该用于作为equals()比较的标准。
相关文章推荐
- Ruby中的集合编写指南
- AVG 7.5.1.43 版本 序列号 集合
- SQL Server游标的使用/关闭/释放/优化小结
- 编写高质量代码改善C#程序――使用泛型集合代替非泛型集合(建议20)
- C#检查指定对象是否存在于ArrayList集合中的方法
- C#写入对象或集合类型数据到xml文件的方法
- C#中的集合用法分析
- Equals和==的区别 公共变量和属性的区别小结
- C#常见的几种集合 ArrayList,Hashtable,List<T>,Dictionary<K,V> 遍历方法对比
- JavaScript Archive Network 集合
- Backbone.js中的集合详解
- jQuery学习7 操作JavaScript对象和集合的函数
- 网页代码常用小技巧总结第1/3页
- 详解JAVA高质量代码之数组与集合
- 基于Java回顾之集合的总结概述
- 探讨:如何使用委托,匿名方法对集合进行万能排序
- JavaScript中的集合及效率
- C#各种集合操作的性能总结
- java String 类的一些理解 关于==、equals、null
- hashCode方法的使用讲解