码迷,mamicode.com
首页 > 其他好文 > 详细

HashSet

时间:2019-05-16 21:43:11      阅读:120      评论:0      收藏:0      [点我收藏+]

标签:比较   相等   try   能力   查看   entry   code   大小   注意   

HashSet是Set接口的典型实现,因此不能包含有重复元素。同时也是无序的(这个无序是指遍历HashSet时得到的元素顺序跟add进入的顺序会不一样)。此外元素可以是null,但只能添加一个null元素,并且null元素放在第一位。

new HashSet()对象其实是new HashMap()对象 这个通过看HashSet源码可以知道。

而且通过源码可以知道往HashSet添加元素时为了排除重复元素,HashSet使用了HashMap的键的去重,两者为同一段代码,也即是说原理实现与HashMap的键去重是一样的。需要注意的是:判断两个元素是否相同,先是比较它们的HashCode()返回hashCode值是否相等,并且再通过equals()判断两个对象是否相等。所以需要重写对象的hashCode()和equals(),尽量保证两个对象通过equals()方法比较返回true时,它们的hashCode()方法返回值也相等。
同时HashSet使用Hash算法存储元素,因此具有良好的存取和查询能力。往HashSet里添加一个元素时,会调用对象重写的HashCode()方法得到该对象的hashCode值。然后根据该hashCode值决定该对象在HashSet中存储的位置。

查看源码可知,new HashSet时会初始化一个大小为16的Entry数组。

HashSet

标签:比较   相等   try   能力   查看   entry   code   大小   注意   

原文地址:https://www.cnblogs.com/Jin1000x/p/10878170.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!