涉及到的数据结构
数组,链表(双向循环链表),哈希表,红黑数
java集合框架中的接口特点
List (有序 可重复) Map (键唯一 值可重复) Set(无序 不可重复)
ArrayList
1 底层实现 数据结构是数组 (查询快,增删慢)
2 线程安全 线程不安全,效率高
3 扩容机制 初始为10,当容量不够时,ArrayList是当前容量*1.5+1
Vector
1 底层实现 数据结构是数组 (查询快,增删慢)
2 线程安全 线程安全,效率低 Vector的操作方法上加上了同步关键字
3 扩容机制 初始为10,当容量不够时,默认扩展一倍容量
LinkedList
1 底层实现 双向循环链表 (查询速度慢,增删快)
2 线程安全 线程不安全,效率高
3 无初始大小,无扩容机制
HashMap
1 底层实现 哈希表
2 线程安全 线程不安全 效率高
3 扩容机制 初始为16,增长因子0.75
LinkedHashMap
1 底层实现 哈希表 + 链表
1.1 由链表保证元素有序,由哈希表保证元素唯一
Hashtable
1 底层实现 哈希表
2 线程安全 线程安全,效率低 Hashtable的操作方法上加上了同步关键字
3 扩容机制 默认为11 增长因子0.75
TreeMap
1 底层实现 红黑数 支持排序和键唯一
2 线程安全,线程不安全
HashSet
1 底层实现 使用哈希表实现(HashMap)
2 线程安全 线程不安全
3 扩容机制 初始容量16,加载因子0.75
TreeSet
1 底层实现 基于TreeMap
2 线程安全 线程不安全
LinkedHashSet
1 底层实现 基于linkedHashMap
2 线程安全 线程不安全
问题解答
1 哈希表如何保证键唯一 (主要依赖于两个方法hashCode()和equals())
首先判断hashCode()值是否相同 否 直接添加到集合 是 继续判断eauls() 看其返回值 是true:说明元素重复,不添加,是false:就直接添加到集合
2 TreeMap是否如何保证元素唯一和排序的
2.1 排序 要求存放的对象所属的类必须实现Comparable接口,该接口提供了比较元素的compareTo() 方法,当插入元素时会回调该方法比较元素的大小
2.2 唯一 根据排序去遍历树,查询有没有相同的节点,如果没有返回null,已有的话,就替换树
集合选型参考
1 键值对象形式(Map)
1.1 需要排序 TreeMap
1.2 不需要排序 hashMap (常用)
2 非键值对象形式(Collction)
2.1 元素唯一 Set
2.1.1 元素需要排序 TreeSet
2.1.2 元素不需要排序 HashSet (常用)
2.2 元素不唯一 List
2.2.1 需要线程安全 Vector
2.2.2 增删多 LinkedList
2.2.3 查询多 ArrayList (常用)