1、集合容器有哪些
单列:collection
list:ArrayList、LinkedList、Vector
Set:HashSet、TreeSet
双列:Map
HashMap
TreeMap
HashTable
2、collection和collections有什么区别
collection是单列集合的顶层接口
collections是集合工具类,包含了集合元素进行排序和线程安全的各种操作方法
3、List、Set、Map之间有什么区别
List是单列集合可重复,元素都有索引,可以使用索引操作,元素存取顺序一致
Set是单列集合,元素不可重复,没有索引,不能使用索引操作元素,不能保证元素存取顺序
Map属于双列集合,存储的是键值对
4、HashMap和HashTable有什么区别
都实现了Map接口,都可以存储键值对
HashMap可以使用null作为key或者value,HashTable不可以,HashMap线程不安全效率高,HashTable线程安全效率低
5、如何决定使用HashMap还是TreeMap
TreeMap可以对元素进行排序,所以需要按照一定规则对元素进行排序的话,就选择使用TreeMap,一般情况使用HashMap
6、ArrayList和LinkedList区别
ArrayList底层是数组,查询快增删慢,LinkedList底层是链表,查询慢增删快
7、如何做到数组和List之间的转换
List转换为数组可以调用toArray方法
数组转换List使用asList方法
8、ArrayList和Vector的区别是什么
Vector是线程安全的,在单线程环境下使用ArrayList,扩容时,Vector是100%,ArrayList是50%,所以后者更节省内存
9、哪些集合是线程安全的
Vector:比ArrayList多出了同步化机制
Stack:堆栈类,先进先出
HashTable:比HashMap多出了线程安全
10、ConcurrentHashMap和HashTable的区别
concurrentHashMap锁定的是Map的部分,多线程中访问不同的数据段不会存在竞争,提高并发效率
HashTables是锁定整个map,效率低
11、什么是红黑树
红黑树是一种含有红黑结点并且能够自平衡的二叉查找树
他们所有结点要么是红色要么是黑色,根结点是黑色,每个叶子结点也是黑色,没有两个相连的红色结点,任意一个结点到每个叶子结点的路径都包含相同的黑色结点
12、jdk1.7到1.8HashMap变化
1.7是数组加链表1.8之后是数组加链表加红黑树,1.8之后大于8之后就会转换成红黑树
13、HashMap扩容原理
初始化容量是16,达到阈值后扩容,阈值=最大容量*0.75,每次扩容两倍,扩容是用一个容量更大的数组将原有数组拷贝过来