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集合的线程安全类你知道吗

Java集合容器面试题(2020最新版)

以上是关于HashSet理解java集合的主要内容,如果未能解决你的问题,请参考以下文章

由浅入深理解java集合——集合 Set

Java集合之HashSet

Java集合框架中的Hashtable、HashMap、HashSet、哈希表概念

对hashmap,hashset,hashtable的理解

Java集合系列四HashSet和LinkedHashSet解析

Java集合框架中的Hashtable,HashMap,HashSet,哈希表概念