java面试题《五、集合》

1.集合和数组的区别

数组是固定长度的;集合是可变长度的

数组可以存储基本数据类型,也可以存储引用数据类型;集合只能存储引用数据类型

数组存储的元素是同一个数据类型;集合存储的对象可以是不同数据类型的

2.常用的集合类有哪些?

Map接口和collection接口是所有集合框架的父接口

Collection接口的子接口包括:set接口和List接口;

set接口的实现类有:HashSet、TreeSet、LinkedHashSet

List接口的实现类有:ArrayList、LinkedList

Map接口的实现类:HashMap、HashTable

3.List接口和Set接口

List:有序,可以重复,元素可以为null,元素都有索引

set:无序,不可以存储重复元素,只允许存入一个nullyuansu 

4.集合框架底层数据结构

ArrayList:数组

LinkedList:双向循环列表

Hashset:HashMap

TreeSet:红黑树

HashMap:jdk1.8之前,数组+链表;jdk1.8之后,当链表长度大于阈值,默认为8,链表转化为红黑树。

HashTable:数组+链表组成

TreeMap:红黑树

5.ArrayList和LinkedList的区别是什么?

(1)ArrayList是动态数组的数据结构,LinkedList是双向链表的数据结构

(2)ArrayList比LinkedList的查询速度快,增加和删除速度慢。

(3)LinkedList比ArrayList更占内存空间。

(4)都是线程不安全。

6.List接口和set接口的区别

list:有序,元素可以重复,可以插入多个null,元素都有索引

set:无序,不可以存储重复元素,只允许一个null元素。

7.hashSet和hashMap的区别

(1)hashSet实现了set接口,hashMap实现了map接口

(2)hashSet存储对象,hashMap存储键值对

(3)hashSet调用add方法添加元素,hashMap调用put方法添加元素。

8.说一下HashMap的实现原理

HashMap是基于哈希表的Map接口的非同步实现,允许使用空值空键。HashMap是基于Hash算法实现的,(1)当put元素时,利用key的hashCode重新hash计算出当前对象元素在数组中的下标。(2)存储时,如果出现hash值相同的key,如果key相同,则覆盖原始值,如果key不同,则将当前的key-value放入链表中(3)获取时,先找到hash值对应的下标,再进一步判断key是否相同,从而找到对应值。

9.HashMap和HashTable的区别?

(1)HashMap是非线程安全的,HashTable都是线程安全的。

(2)HashMap的效率更高,不建议使用HashTable,多线程环境下,使用ConcurrentHashMap替代。

(3)HashMap允许空值空键,HashTable不允许空值空键。

(4)HashMap默认初始化大小为16,每次扩容为原来的2倍;HashTable初始化大小为11,每次扩容为原来的2n+1;

(5)HashMap在jdk1.8之前底层是数组+链表,之后当链表长度大于8时,转化为红黑树;HashTable一直是数组+链表。

10.如何实现Array和List之间的转换。

Array转List:Arrays.asList(array) 

List转Array:List的toArray()方法。

posted on 2020-05-17 12:36  kkw105  阅读(138)  评论(0)    收藏  举报