Java集合类——HashSet
来源:互联网 发布:win10禁用windows键 编辑:程序博客网 时间:2024/06/05 19:19
HashSet实现了Set接口,Set中不能记住元素的添加顺序,不允许包含相同的元素,如果试图把两个相同的元素加入到Set中,将会添加失败,add()方法返回false,新元素也不会加入集合中。
HashSet是Set的一个实现类,因为是按照Hash算法来存储元素,所以在查找和存取上有很好的性能。HashSet的特点:
|-不能保证元素的排列顺序;
|-HashSet不是同步的,如果有多个线程要访问一个HashSet,需要进行同步操作;
|-HashSet中元素的值可以是null。
HashSet的底层实现机制是HashMap:
public HashSet() {
map = new HashMap<>();
}
当执行add()方法时,HashSet的元素放在HashMap的Key中,HashMap的值统一是PRESENT,PRESENT的定义方式如下:
private static final Object PRESENT = new Object();
add()方法的实现如下:
public boolean add(E e) {
return map.put(e, PRESENT)==null;
}
HashMap调用put()方法时,遇到重复的Key值会覆盖,用新的value替换旧的value,而HashSet的元素保存在Key中,重复的元素被覆盖,所以HashSet的元素是不会重复的。
需要注意,如果重写了equals()方法,就必须同时重写hashCode()方法,使得两个对象使用equals()方法比较返回true时,两个对象的hashCode值也相同。
如果两个对象通过equals()方法返回true,但两个对象的hashCode值不同,这时HashSet将会把这两个对象保存在Hash表的不同位置,使这两个对象都添加成功。
如果两个对象的hashCode()方法返回的hashCode值相同,但通过equals()方法比较反悔了false,这时,因为两个对象HashCode值相同,HashSet试图把两个对象保存在同一位置,但又不行,所以实际上会在这个位置上使用链式结构来保存多个对象。
- Java集合类——HashSet
- Java集合——HashSet
- Java集合类(4) —— 介绍HashSet
- Java集合类4—HashSet、TreeSet、HashMap、TreeMap介绍
- Java集合类框架—Set、HashSet、TreeSet
- java集合——HashSet的用法
- java- 集合类 (5)-HashSet
- 【Java集合类】HashSet解析
- 黑马程序员——java集合中的HashSet
- 黑马程序员:Java基础——Set集合之HashSet
- Java集合框架3——HashSet、TreeSet
- JAVA集合之——HashSet和LinkedSet
- Java 集合框架源码分析(七)——HashSet
- java集合框架学习—HashSet的实现原理
- 黑马程序员—Java集合框架(Set、HashSet、TreeSet)
- java基础之—HashSet集合学习笔记
- Java Colections 集合类 —— List、ArrayList、Set(HashSet)
- Java集合概述--HashSet类解析
- 关于springmvc中jackson的No suitable constructor found for type错误
- 跟我学TCP/IP系列3
- git 学习笔记
- setalpha和setimagealpha的区别详解
- [HNOI2008]玩具装箱
- Java集合类——HashSet
- struts2 no result defined for action xxxx and result input
- universal-image-loader源码解析
- android gps机制分析--定位数据HAL处理
- oracle 练习题
- OSGI入门
- hdu_5649 DZY Loves Sorting
- hdu1050 Moving Tables
- 一个能够快速把JSON数据格式化成漂亮网页的开源JavaScript库:angular-json-human