Java Set常见面试题

Java集合面试之Set篇

有 List 了为什么还要有 Set?Java 容器 Set 的核心通关指南 (qq.com)

主要有HashSet、LinkedHashSet、TreeSet

  • HashSet(无序,唯一): 基于 HashMap 实现的,底层采用 HashMap 来保存元素
  • LinkedHashSet: LinkedHashSetHashSet 的子类,并且其内部是通过 LinkedHashMap 来实现的。有点类似于我们之前说的 LinkedHashMap 其内部是基于 HashMap 实现一样,不过还是有一点点区别的
  • TreeSet(有序,唯一): 红黑树(自平衡的排序二叉树)

1、HashSet 的实现原理?

HashSet 是基于 HashMap实现的,HashSet的值存放于HashMap的key上,HashMap的value统一为静态对象PRESENT,因此 HashSet 的实现比较简单,相关 HashSet 的操作,基本上都是直接调用底层 HashMap 的相关方法来完成,HashSet 不允许重复的值

2、HashSet如何保证唯一性?

1).HashSet底层数据结构是哈希表,哈希表就是存储唯一系列的表,而哈希值是由对象的hashCode()方法生成。

2).确保唯一性的两个方法:hashCode()equals()方法。

3、LinkedHashSet如何保证有序和唯一性?

1).底层数据结构由哈希表和链表组成。

2).链表保证了元素的有序即存储和取出一致,哈希表保证了元素的唯一性。

4、TreeSet如何保证元素的排序和唯一性?

底层的数据结构是红黑树(一种自平衡二叉查找树)。

JDK 1.8中为什么HashMap使用红黑树而不是普通的AVL树

5、HashSet、TreeSet 和 LinkedHashSet 三种类型什么时候使用它们?

(1)HashSet中不能有相同的元素,可以有一个Null元素,存入的元素是无序的。

(2)LinkedHashSet中不能有相同元素,可以有一个Null元素,元素严格按照放入的顺序排列。

(3)TreeSet是中不能有相同元素,不可以有Null元素,根据元素的自然顺序进行排序。

无排序要求可以选用HashSet;想取出元素的顺序和放入元素的顺序相同,那么可以选用LinkedHashSet。想插入、删除立即排序或者按照一定规则排序可以选用TreeSet。

6、HashSet 和 LinkedHashSet 判定元素重复的原则是相同的?

是的,会先去执行 hashCode() 方法,判断是否重复。如果 hashCode()返回值相同,就会去判断 equals 方法。如果equals() 方法还是相同,那么就认为重复。

7、TreeSet 判断元素重复原则?

TreeSet 的元素必须是实现了 java.lang.Comparable<T> 接口,所以他是根据此接口的方法 compareTo 方法进行判断重复的,当返回值一样的时认定重复。

8、怎么实现一个线程安全的 hashset?

Collections.synchronizedSet()

or

CopyOnWriteArraySet

9、CopyOnWriteArraySet 的实现?

是一个支持并发访问的容器,CopyOnWriteArraySet是借助CopyOnWriteArrayList实现的,只不过CopyOnWriteArraySet是在CopyOnWriteArrayList上使用indexOf不允许存入重复元素。

10、EnumSet是什么?

是枚举类型的集合实现。是不同步的,不允许值为null的元素。

11、HashSet和TreeSet的区别两者主要在实现方式、数据是否有序以及是否可以放入null值等三方面存在区别?

一、实现方式

  • HashSet是哈希表实现的。
  • TreeSet是二叉树实现的。

二、数据是否有序

  • HashSet中的数据是无序的。
  • TreeSet中的数据是自动排好序的。

三、是否可以放入null值

  • HashSet可以放入null,但只能放入一个null。
  • TreeSet不允许放入null值。
重生之八股仙帝 文章被收录于专栏

曾有一千古奇人,精修八股文,成遁世之高人,彻天彻地畅游天地间。 今人皆忙忙,急于求成,岂不知八股乃道门口径,背负天人,若经熟读背诵,更能开拓智慧之门,探寻未来之路。 天下繁华,不尽长夜,唯有读书为伴,熟读八股文更是攀登高峰之路。磨砺文字,升腾智慧,唯有勤玉立志,始可破天荒,登临九重不竭之巅! 吾辈修炼之路,虽曲折荆棘,但信念不曾磨灭,唯有铭记八股精髓,方能指引灵魂归宿,成就一生辉煌!

全部评论

相关推荐

06-08 22:25
门头沟学院 Java
从零开始的转码生活:这hr不会打开手机不分青红皂白给所有人群发这句话,过一会再给所有人再发一遍,这肯定会有重复的,不管,再过一会再发一遍
点赞 评论 收藏
分享
醉蟀:你不干有的是人干
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务