Java记录 -56- 详解HashSet不含重复元素的实现
2017-07-01 15:59
344 查看
详解HashSet不含重复元素的实现
HashSet的add方法:
public boolean add(E e)
如果此 set 中尚未包含指定元素,则添加指定元素。更确切地讲,如果此 set 没有包含满足 (e==null ? e2==null : e.equals(e2)) 的元素 e2,则向此 set 添加指定的元素 e。如果此 set 已包含该元素,则该调用不更改 set 并返回 false。
HashSet的add方法中使用到了Object的equals方法,该方法详解见:http://zlfwmm.blog.51cto.com/5892198/1709412
public class HashSetTest { public static void main(String[] args){ HashSet hashSet = new HashSet(); hashSet.add(new Person("zhangsan")); hashSet.add(new Person("zhangsan")); hashSet.add(new String("aa")); hashSet.add(new String("aa")); System.out.println(hashSet); //[my.set.Person@1fb8ee3, my.set.Person@c17164, aa] }}class Person{ int age; String name; public Person(String name){ this.name = name; }}上面程序运行结果为:[my.set.Person@1fb8ee3, my.set.Person@c17164, aa],该结果有点让人诧异。
HashSet add新元素的判断步骤:
当使用HashSet时,hashCode()方法就会得到调用,判断已经存储在集合中的对象的hash code值是否与增加的对象的hash code值一致;如果不一致,直接加进去;如果一致,再进行equals方法的比较,equals方法如果返回true,表示对象已经有了,就不会再增加新的对象,否则就
4000
会添加新对象。
所以针对以上程序的结果得出结论:
Person类没有重写Object的hashCode方法,而String重写了Object的hashCode方法,其hash code值跟传入的字符串有关系,当字符串一样时,其hash code值则一样,并且String还重写了Object的equals方法,也是比较两个字符串是否一样。
如果想让HashSet中只能加入一个name为zhangsan的Person对象,则需要让Person类重写Object的hashCode和equals方法。
HashSet的add方法:
public boolean add(E e)
如果此 set 中尚未包含指定元素,则添加指定元素。更确切地讲,如果此 set 没有包含满足 (e==null ? e2==null : e.equals(e2)) 的元素 e2,则向此 set 添加指定的元素 e。如果此 set 已包含该元素,则该调用不更改 set 并返回 false。
HashSet的add方法中使用到了Object的equals方法,该方法详解见:http://zlfwmm.blog.51cto.com/5892198/1709412
public class HashSetTest { public static void main(String[] args){ HashSet hashSet = new HashSet(); hashSet.add(new Person("zhangsan")); hashSet.add(new Person("zhangsan")); hashSet.add(new String("aa")); hashSet.add(new String("aa")); System.out.println(hashSet); //[my.set.Person@1fb8ee3, my.set.Person@c17164, aa] }}class Person{ int age; String name; public Person(String name){ this.name = name; }}上面程序运行结果为:[my.set.Person@1fb8ee3, my.set.Person@c17164, aa],该结果有点让人诧异。
HashSet add新元素的判断步骤:
当使用HashSet时,hashCode()方法就会得到调用,判断已经存储在集合中的对象的hash code值是否与增加的对象的hash code值一致;如果不一致,直接加进去;如果一致,再进行equals方法的比较,equals方法如果返回true,表示对象已经有了,就不会再增加新的对象,否则就
4000
会添加新对象。
所以针对以上程序的结果得出结论:
Person类没有重写Object的hashCode方法,而String重写了Object的hashCode方法,其hash code值跟传入的字符串有关系,当字符串一样时,其hash code值则一样,并且String还重写了Object的equals方法,也是比较两个字符串是否一样。
如果想让HashSet中只能加入一个name为zhangsan的Person对象,则需要让Person类重写Object的hashCode和equals方法。
相关文章推荐
- Java记录 -56- 详解HashSet不含重复元素的实现
- 使用java的html解析器jsoup和jQuery实现一个自动重复抓取任意网站页面指定元素的web应用
- 使用java的html解析器jsoup和jQuery实现一个自动重复抓取任意网站页面指定元素的web应用
- java实现输出字符串中第一个出现不重复的字符详解
- 重写javascript的Array.prototype.push方法实现类似java.util.set添加不重复元素
- 使用java的html解析器jsoup和jQuery实现一个自动重复抓取任意网站页面指定元素的web应用
- 【LeetCode-面试算法经典-Java实现】【026-Remove Duplicates from Sorted Array(删除排序数组中的重复元素)】
- 一个有趣的问题:怎么在JS的数组中去除重复元素?(JAVA实现吧..)
- Java之hashSet实现引用类型的禁止重复功能
- Java实现二分查找算法(元素可重复)
- 使用java的html解析器jsoup和jQuery实现一个自动重复抓取任意网站页面指定元素的web应用
- Java代码实现删除一个有序数组里面的重复元素
- HashSet中实现不插入重复的元素
- Java HashSet的实现原理详解
- 【C++ STL应用与实现】56: 使用std::unique删除重复元素
- Java学习疑点(6)--Set集合添加元素时底层如何实现无重复元素?
- java怎么判断两个Set 里的对象的值是否相同【两个set中的值是否相等】、java treeset和hashset如何判断元素是否相同【即对象是否完全相同;利用一个set去除重复元素】
- [java]一次for循环实现查询有序数组中所有重复的元素
- Java实现找出数组中重复次数最多的元素以及个数
- JAVA基础之——HashSet中是如何判断元素是否重复的