二、容器
1.java 容器都有哪些?
set、hashset、linkedhashset、treeset、list、arraylist、linkedlist、vector、map、hashmap、linkedhashmap、hashtab、treemap
2.Collection 和 Collections 有什么区别
collection是集合的最顶层,包含了集合体系和共性
Collections 是工具类,用于操作collection
参考1
3.List、Set、Map 之间的区别是什么?
list 有序集合
set 不可重复集合
map 键值对映射;key唯一,不允许重复;value允许重复,允许null情况
4.HashMap 和 Hashtable 有什么区别?
-
hashmap是非同步;hashtable是同步的,所有的读写操作都进行了锁保护;单线程情况下,hashmap的效率更好;
-
hashmap允许键值为null,hashtable不允许
-
hashmap的迭代器是fail-fast,而hashmap不同
5.如何决定使用 HashMap 还是 TreeMap
有排序要求,需要返回有序情况时的map使用TreeMap
6.说一下 HashMap 的实现原理
链表+数组,hashmap的初始长度为16,即数组的长度为16,填充因子为0.75,当数组长度不满足时,扩容长度为当前的一倍
7.说一下 HashSet 的实现原理
hashset中不允许有null值,hashset中add方法底层采用了hashmap的put,首先会判断key是否存在,如果存在则修改value,不存在则添加key-value;而在set方法中,因为不存在value,所以判断key如果存在不插入,不存在插入,这样hashset就不存在重复值
8.ArrayList 和 LinkedList 的区别是什么?
结构实现:arraylist采用动态数组,linkedlist采用双向链表
随机访问效率:arraylist比linkedlist在随机访问效率上高,因为linkedlist是线性存储方式,所以需要移动指针从前往后依次查找
增加和删除效率:linkedlist在增加和删除效率比arraylist上高,因为arraylist采用动态数组,增加删除会影响其他数组的下标
在增加删除频繁的环境下使用linkedlist更好,在需要查询的情况下使用arraylist
9.如何实现数组和 List 之间的转换
for循环
arrays.aslist
10.ArrayList 和 Vector 的区别是什么
vector是同步的,线程安全,arraylist是异步的,线程不安全
vector的增长率是目前数组长度的100%,而arraylist增长率是目前长度的50%。如果在集合中使用数据量比较大的数据,用vector有一定优势
11.Array 和 ArrayList 有何区别
array可以包含基本类型和对象类型,arraylist只能包含对象类型
array大小固定,arraylist大小是动态变化的
arraylist提供了更多方法和特性
12.在 Queue 中 poll()和 remove()有什么区别
poll移除为空时返回null,remove移除为空时返回异常NoSuchElementException异常
13.哪些集合类是线程安全的?
hashtable,vector,stack,java.util.concurrent报下所有的集合类…
14.迭代器 Iterator 是什么
迭代器可以遍历集合的对象,为各种容器提供了公共的操作接口,隔离对容器的遍历操作和底层实现(解耦)
缺点是增加新的集合类对应增加新的迭代器类,迭代器类和集合类成对增加。
迭代器是java中常用的设计模式之一,用于顺序访问集合对象的元素,无需知道集合对象的底层实现
迭代器通常被称为“轻量级”对象,因为创建它的代价小