Java集合面试题及答案(11道常见必考题解析)

Java集合面试题及答案(11道常见必考题解析)-mikechen

Java集合基本是Java面试必考必问的,需要重要掌握,今天给大家总结Java集合面试题及答案@mikechen

Java集合框架有哪些?

Java集合面试题及答案(11道常见必考题解析)-mikechen

Java集合类主要由两个根接口Collection和Map派生出来的。

Collection代表一组对象,每一个对象都是它的子元素;

Set不包含重复元素的Collection,包含:HashSet、TreeSet、LinkedHashSet等。

List有顺序的collection,并且可以包含重复元素,常见包含:ArrayList、LinkedList等。

Map可以把键(key)映射到值(value)的对象,键不能重复,常见包含:HashMap、TreeMap、Hashtable等。

 

Collection框架有哪些?

Java集合面试题及答案(11道常见必考题解析)-mikechen

1)List

List代表了有序可重复集合,可直接根据元素的索引来访问

2)Set

Set代表无序不可重复集合,只能根据元素本身来访问

3)Queue

Queue是队列集合

 

List集合框架有哪些?

List接口常用的实现类有:ArrayList、LinkedList、Vector。

Java集合面试题及答案(11道常见必考题解析)-mikechen

ArrayList、Vector、LinkedList优劣势比较?

1)ArrayList
优点: 底层数据结构是数组,查询快,增删慢。
缺点: 线程不安全,效率高

2)Vector
优点: 底层数据结构是数组,查询快,增删慢。
缺点: 线程安全,效率低

3)LinkedList
优点: 底层数据结构是链表,查询慢,增删快。
缺点: 线程不安全,效率高

 

Java集合常用Set?

Set接口常用的实现类有:HashSet、LinkedHashSet、TreeSet

Java集合面试题及答案(11道常见必考题解析)-mikechen

 

Java集合常用的Map?

Java集合面试题及答案(11道常见必考题解析)-mikechen

常见包含:HashMap、TreeMap、Hashtable等,重点要掌握好HashMap。

 

HashMap的数据结构

HashMap的数据结构:数组+链表+红黑树(JDK1.8增加了红黑树部分)的数据结构。

如下所示:

Java集合面试题及答案(11道常见必考题解析)-mikechen

为什么HashMap1.8需要引入红黑树(重点)

1.7HashMap集合中,当我们发生了Hash冲突,则会存放在同一个链表中,当链表的查询长度过长,查询效率非常低,因为采用链表存放查询的时间复杂度是为O(n),从头查询到尾部、在JDK1.8开始优化当数组容量>=64且链表长度>8则会将链表转化为改为红黑树,红黑树的时间复杂度为O(logn),性能有所提升。

 

HashMap1.8链表在什么时候转化成红黑树

当数组的容量大于=64且链表长度大于8则会将链表转化成红黑树。

红黑树查询的时间复杂度是为O(logN)

当红黑树的节点个数<6则将红黑树转换成链表

 

HashMap如何解决Hash冲突问题

JDK1.7版本的HashMap

1.根据key的hash值,计算该key存放在数组的index位置

2.如果发生index冲突,则会使用单向链表存放

同一个链表中存放的都是hashCode值相同,但是内容值却不同

JDK1.8版本的HashMap

1.根据key的hash值,计算该key存放在数组的index位置

2.如果发生index冲突,则会使用单向链表存放,当数组的容量大于=64且链表长度大于8则会将链表转化成红黑树。

根据链表查询key的时间复杂度就是为O(n)—从头查询到尾部

 

HashMap与HashTable之间的区别

1.HashMap线程不安全、HashTable线程安全,但是使用HashTable在多线程的情况下效率比较偏低,所以在多线程的情况下使用ConcurrentHashMap;

2.多线程的情况下使用HashTable能够保证数据安全性,是采用synchronized锁将整个HashTable中的数组锁住,在多个线程中只允许一个线程访问Put或者Get,效率非常低。

3.多线程的情况下使用HashMap线程不安全,没有上锁,可能会发生一些数据冲突问题,但是效率比较高的。

4.HashMap可以允许存放key值为null,存放在数组第0个位置、HashTable不允许存放的key为null

补充概念“线程安全问题” 多个线程同时访问一个全局共享变量 可能会发生线程安全问题。

陈睿mikechen

10年+大厂架构经验,资深技术专家,就职于阿里巴巴、淘宝、百度等一线互联网大厂。

关注「mikechen」公众号,获取更多技术干货!

后台回复面试即可获取《史上最全阿里Java面试题总结》,后台回复架构,即可获取《阿里架构师进阶专题全部合集

评论交流
    说说你的看法