Granda's Blog

JAVA:常用集合

常用集合概览

  • Collection集合体系
    Collection集合体系

  • Map体系
    Map体系

Set

  • 不允许包含重复元素、无序的
  • Java先实现Map集合,通过包装一个Map集合的所有value为null,就形成了一个Set集合
线程安全 特点
HashSet 不安全 用Hash算法来存储集合元素,基于数组,出现相同hashCode值的元素,在相同位置用链式结构存储,查询和存储性能好
LinkedHashSet 不安全 同时使用链表维护元素次序,遍历快,输出元素的顺序与添加顺序一致
TreeSet 不安全 用红黑树存储,元素有序
EnumSet 不安全 为枚举类设计的集合类,有序

List

  • 元素有序,可重复
  • 可以根据索引来返回集合中的元素
线程安全 特点
ArrayList 不安全 封装了一个可以动态分配的数组,性能比Vector高,具有较高的随机访问性能
Vector 安全 古老,类似ArrayList,效率较低,不推荐使用
LinkedList 不安全 底层用链表形式存储集合数据,随机访问性能较差,插入、删除性能出色
  • 对于ArrayList和Vector集合,使用随机访问方法(get)遍历,性能更好
  • 对于LinkedList集合,使用迭代器(Iterator)来遍历,性能更好

Queue

  • 队列,先进先出(FIFO)
特点
PriorityQueue 不是绝对标准的队列,按元素大小排列
Deque/ArrayDeque 双向队列,可以当栈使用

Map

线程安全 特点
HashMap 不安全 性能高,可以使用null作为key和value的值
Hashtable 安全 古老,不能使用null,比HashMap慢,不推荐使用
LinkedHashMap 不安全 使用双向链表来维护key-value对次序,性能略低于HashMap,但是遍历性能好

Collections工具类

  • 提供多个synchronizedXxx方法,包装集合,使其变成线程安全集合
    1
    2
    3
    4
    Collection c = Collections.synchronizedCollection(new ArrayList());
    List list = Collections.synchronizedList(new ArrayList());
    Set set = Collections.synchronizedSet(new HashSet());
    Map map = Collections.synchronizedMap(new HashMap());