集合问题

2018-03-27  本文已影响0人  猴哥一一

转自小端有话说,侵改;

1.问:List 和 Set 都有什么区别?

分析:这种问题面试官一般想考察的都是你对这两种数据结构的了解,以及使用时候的选择依据,可以从数据结构和一些使用案例入手分别做个介绍,可深可浅,就看自己了解的程度了。
答:List,列表,元素可重复。常用的实现ArrayList和LinkedList,前者是数组方式来实现,后者是通过链表来实现,在使用选择的时候,一般考虑的是基本数据结构的特性,比如,数组读取效率较高,链表插入时效率较高。
Set,集合,特点就是存储的元素不可重复。常用是实现,是HashSet和TreeSet,分开来谈:

延伸:

image
(请注意框住部分,绿色和橙色的箭头的走向,就是这个双向链表)

2.HashMap 是线程安全的吗,为什么不是线程安全的?

分析:这种问题,既然面试官问起,肯定是在这方面有的聊的。这个问题,在多数情况下,能清晰、全面的描述出问题来龙去脉即可,很少有面试官真的拿一段源码来考。当然,作为应聘者,如果能理解的很透彻,再用简单的图边写边讲,作为补充,还是非常出彩的。

答:嗯,不是线程安全的。主要从两个方面来说:

延伸:
要做到心中有底,还是需要知其然知其所以然才行,所以,撸下源码好好想想,才能做到临阵不乱。

3.问:那你是用什么数据结构来作为替代,满足线程安全的场景要求呢?

分析:这里一般面试官想考察的是对ConcurrentHashMap的了解,但是也有个别情况,会涉及到HashTable,小端就吃过这方面的亏,明明可以一笔带过的小知识点,却由于准备不充分,而没能答完整。
答:在Java里,提供了以下数据结构,可以解决线程安全问题:

扩展:

上一篇下一篇

猜你喜欢

热点阅读