- Collection 和 Collections 有什么区别?
- java.util.Collection 是一个集合接口(集合类的一个顶级接口)。它提供了对集合对象进行基本操作的通用接口方法。Collection接口在Java 类库中有很多具体的实现。Collection接口的意义是为各种具体的集合提供了最大化的统一操作方式,其直接继承接口有List与Set。
- Collections则是集合类的一个工具类/帮助类,其中提供了一系列静态方法,用于对集合中元素进行排序、搜索以及线程安全等各种操作。
- List、Set、Map 之间的区别是什么?
- ArrayList与LinkedList的区别?
- 动态数组,需要连续内存存储,适合下标访问;扩容机制:基础容量10,右移1.5倍扩容;不是尾插还会涉及元素位移。
- 双向链表,分散存储在内存中,插入和删除复杂度O1,查询复杂度On;遍历要用迭代器遍历,因为每次for循环get都需要重新遍历。
- 如何实现数组和 List 之间的转换?
- List转换成为数组:调用ArrayList的toArray方法。
- 数组转换成为List:调用Arrays的asList方法。
- HashMap中常用的方法有哪些?什么时候会触发树化?jdk1.7和1.8实现的差异?1.7的实现为什么会出现死锁,画图说明下?HashMap和TreeMap的区别?
- put、get、remove、containsKey、containsVaule、isEmpty,vaules、ketSet、entrySet
- 数组长度64,链表高度8
- 数组+链表+红黑树
- 多线程下,扩容时,发生节点转移,形成双向链表,get这一范围值产生死循环。
- 结构,有无序、
- HashMap和 HashTable的区別? 底层实现是什么?
区别:
- HashTable有synchronized修饰线程安全的
- HashMap允许key,value为null
结构: 数组+链表+红黑树,jdk8链表高度8,数组长度超过64,链表转为红黑树,元素以内部类Node节点存在
- 计算key的code值,两次hash然后数组长度取模,对应到数组下标
- 没有hash冲突,直接创建Node存入数组。
- 产生hash冲突,先进行equal比较,相同取代;不同判断链表高度没超过8,插入链表尾部,超过并且数组长度超过64链表转为红黑树,长度低于6转回链表。
- 如何决定使用 HashMap 还是 TreeMap?
- 对于在Map中插入、删除和定位元素这类操作,HashMap是最好的选择。
- 然而,假如你需要对一个有序的key集合进行遍历,TreeMap是更好的选择。
基于你的collection的大小,也许向HashMap中添加元素会更快,将map换为TreeMap进行有序key的遍历。