java程序员面试——java基础(1)集合
1.HashMap实现原理?参数?
原理:
- hashmap是数组和链表的结合体,数组每个元素存的是链表的头结点
- 往hashmap里面放键值对的时候先得到key的hashcode,然后重新计算hashcode,(让1分布均匀因为如果分布不均匀,低位全是0,则后来计算数组下标的时候会冲突),然后与length-1按位与,计算数组出数组下标
- 如果该下标对应的链表为空,则直接把键值对作为链表头结点,如果不为空,则遍历链表看是否有key值相同的,有就把value替换,没有就把该对象最为链表的第一个节点,原有的节点作为他的后续节点
参数:
- 初始容量16,达到阀值扩容,阀值等于最大容量*负载因子(默认0.75),扩容每次2倍,总是2的n次方
2.HashMap HashTable区别?,Hashmap key可以是任何类型吗?
3.HashMap ConcurrentHashMap区别?ConcurrentHashMap如何保证线程安全?
ConcurrentHashMap使用分段锁技术,将数据分成一段一段的存储,然后给每一段数据配一把锁,当一个线程占用锁访问其中一个段数据的时候,其他段的数据也能被其他线程访问,能够实现真正的并发访问。
4.LinkedList ArrayList区别
- ArrayList基于数组,LinkedList基于链表
- ArrayList查找快,LinkedList插入删除快
- 随机查找频繁用ArrayList,插入删除频繁用LinkedList
5.ArrayList,Vector,HashMap,Hashtable扩容机制?
- arraylist,初始容量10,(oldCapacity * 3)/2 + 1
- vector,初始容量10,oldCapacity * 2
- hashmap,初始容量16,达到阀值扩容,为原来的两倍
- hashtable,初始容量11,达到阀值扩容,oldCapacity * 2 + 1
6.concurrent包?
7..集合框架图
近期学习spark内容,同时复习整理一下Java的基础知识。