HashSet理解java集合
Posted zhangjin1120
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了HashSet理解java集合相关的知识,希望对你有一定的参考价值。
HashSet理解(一)java集合
HashSet理解(二)怎么做到值不重复
HashSet理解(三)add方法(jdk1.7及以前)是如何插值的
《Java开发实战经典》这本书中,第13章,详细介绍了Java的容器。
java的容器分为两大类:集合(Collection)和映射(Map)。
为什么映射会翻译为Map?
映射的标准翻译是
mapping
, map的本意是地图,可以理解为地图上每一个点,都对应着现实中的一个地方。
映射中不同的key,能否对应同一个value?
先看看映射的数学定义:
两个非空集合A与B间存在着对应关系f,而且对于A中的每一个元素a,B中总有唯一的一个元素b与它对应,就这种对应为从A到B的映射,记作f:A→B。
这个定义仍然是不清晰的,列出几道数学题,直观的看看到底什么是映射。
从第一个映射可以看到,B集合中的元素1,并没有被指向,说明B集合中的元素可以多余。
从这两个题目中可以看出**映射中不同的key,可以对应同一个value。**所以,HashMap中的value值是可以重复的。
HashSet与ArrayList的区别是什么?
- HashSet是无序的,遍历输出结果顺序可能与插入顺序不同。ArrayList是有序的,遍历输出结果顺序和插入顺序相同。
- HashSet存储的对象,不能重复。ArrayList可以重复。
- ArrayList可以根据index取出某一个值,但是HashSet不可以。
HashSet为什么不常用?
无序性,HashSet取对象的顺序,和插入顺序无关。导致不能像ArrayList那样,用fori循环根据index取出某一个值。
HashSet是线程安全的吗?
不是。set接口的三个实现类:HashSet、TreeSet、LinkedHashSet都不是线程安全的。要实现set的线程安全,有两种方式:
Set<String> synSet = Collections.synchronizedSet(new HashSet<>());
Set<String> copySet = new CopyOnWriteArraySet<>();
关于set的线程安全,参考:Java并发编程之set集合的线程安全类你知道吗
以上是关于HashSet理解java集合的主要内容,如果未能解决你的问题,请参考以下文章
Java集合框架中的Hashtable、HashMap、HashSet、哈希表概念