面试题---集合框架篇

1.ArrayList、Vector、LinkedList、HashSet、TreeSet、HashMap、TreeMap的区别
Collection中包含了List和Set
List:分为ArrayList、Vector、LinkedList,是有序可重复的集合
ArrayList:数组,查询快,增删慢,线程不安全,效率高,扩容增长为原来的1.5倍
Vector:数组,查询快,增删慢,线程安全,效率低,扩容为原来的2倍
LinkedList:链表,查询慢,增删快,线程不安全,效率高
Set:HashSet、TreeSet,是无序不可重复的集合,存的话相同的值会添加失败,取值通过迭代遍历获取
HashSet:线程不安全,效率高,底层采用了Map
TreeSet:线程安全,效率低
Map:采用Key-Value存储值
HashMap:Key不可重复,value可以重复,线程不安全,效率高,允许value中为null
TreeMao:线程安全,效率低,不允许value中有null
以上的线程不安全可以通过Collections类的synchronized方法来转为线程安全
2.==和equals的区别
是比较两个变量的值是否相等,比较内存中存储的值是否相等,如果是基本类型只能用比较,如果是对象,则比较地址值是否相等
equals是比较两个独立对象的内容是否相等,不是比较地址值,是比较内容
3.hashMap底层原理说明
1.8后采用数组链表加红黑树的组合,原始桶数为16,节点上含有hashCode,key,value,next四个内容
1.当存一个key-value时,首先计算key的hashCode,然后做位与运算,计算出数组下标,判断该数组是否存有内容;
2.如果该位置没有值,可以直接将值存入
3.如果该位置有值,判断key值是否一致,
4.如果key值一致,覆盖原来key对应的value值,
5.如果key不一致,转为链表结构,链接到数组下面,判断数组的长度
6.如果长度小于8,则开始本轮添加结束
7.如果长度大于等于8,数组扩容,变为原来的2倍,重新计算存储信息
8.如果数组长度大于64,且链表长度大于等于8,链表开始变为红黑树,如果长度小于6,红黑树转为链表
9.如果数组长度大于等于0.75倍的数组长度,数组扩容,如果长度为64,开始放入链表

你可能感兴趣的:(面试题,java)