Java集合类

Collection

List

  1. ArrayList Object数组,线程不安全
  2. Vector Object数组,线程安全
  3. LinkedList 双向链表(JDK1.6之前为循环链表,JDK1.7取消了循环)

Set

  1. HashSet 无序 唯一 基于HashMap实现的,底层采用HashMap来保存元素
  2. LinkedHashSet LinkedHashSet继承与HashSet,并且其内部是通过LinkedHashMap来实现的
  3. TreeSet 有序 唯一 内部基于红黑树

Map

  1. HashMap
    JDK1.8之前HashMap由数组+链表组成的,数组是HashMap的主体,链表则是主要为了解决哈希冲突而存在的(“拉链法”解决冲突).JDK1.8以后在解决哈希冲突时有了较大的变化,当链表长度大于阈值(默认为8)时,将链表转化为红黑树,以减少搜索时间

  2. LinkedHashMap
    LinkedHashMap 继承自 HashMap,所以它的底层仍然是基于拉链式散列结构即由数组和链表或红黑树组成。另外,LinkedHashMap在上面结构的基础上,增加了一条双向链表,使得上面的结构可以保持键值对的插入顺序。同时通过对链表进行相应的操作,实现了访问顺序相关逻辑

  3. HashTable
    数组+链表组成的,数组是 HashMap 的主体,链表则是主要为了解决哈希冲突而存在的

  4. TreeMap
    红黑树(自平衡的排序二叉树)

集合类的比较

Arraylist 与 LinkedList 异同

  1. 是否保证线程安全
  2. 底层数据结构
  3. 插入与删除耗时是否与元素位置有关
  4. 是否支持随机快速访问
  5. 内存空间占用

ArrayList 与 Vector 区别

  1. 线程安全

HashMap 和 Hashtable 的区别

  1. 线程是否安全
  2. 效率
  3. 对Null key 和Null value的支持
  4. 初始容量大小和每次扩充容量大小的不同
  5. 底层数据结构

HashSet 和 HashMap 区别

  1. 实现的接口不同
  2. 存储的内容不同
  3. 添加元素的方法
  4. 计算hashcode的方式
  5. 获取数据的速度

ConcurrentHashMap 和 Hashtable 的区别

  1. 底层数据结构
  2. 实现线程安全的方式(重要)

ArrayList自定义排序

重写Comparator.compare

重写Comparable.compareTo