zoukankan      html  css  js  c++  java
  • Java Collection Framework 备忘点

    最顶端是两个接口,集合和映射——  Collection<T>  /  Map<K, V>

    List 列表        保持插入顺序

      ArrayList      擅长随机读

      LinkedList       增、删

      Arrays$ArrayList    定长List,功能有限

    Set

      HashSet      查找最快

      TreeSet       升序排序

      LinkedHashSet   保持插入顺序

    Queue 队列

      LinkedList     也实现了Queue接口,

      PriorityQueue    保持插入顺序

    Map 映射

      HashMap     散列映射,速度最快

      LinkedHashMap  保持插入顺序

      WeakHashMap   键不再使用时,值回报GC

      TreeMap      升序排序

    根据词缀总结一下

    List和带“Linked”的实现都能保持插入顺序。

    带"Hash"的实现速度都比较快,特别是读。

    带“Tree”的实现都能在插入是进行排序。

    以下的实现几乎没有理由再去使用

      Vector   最旧的List实现。几乎每个对外方法都是synchronized的,内部数组每次扩容时增长一倍,而不是像ArrayList一样增长50%。

      Hashtable  最旧的Map实现。几乎每个对外方法都是synchronized的,使用Enumeration进行迭代,contains性能太差。

      Stack    废弃API,LinkedList完全可以取代它。

    选择哪个实现?

      List    默认选择ArrayList,需要大规模的增删时,选择LinkedList,需要线程安全时,选择Collections.synchronizedList()。

      Set    默认选择HashSet,对排序、保持插入顺序有需求时,按需选择,需要线程安全时,选择Collections.synchronizedSet()或Collections.synchronizedSortSet(),

      Queue   默认选择LinkedList,对保持插入顺序有需求时,选择PriorityQueue。

      Map    默认选择HashMap,对排序、保持插入顺序有需求时,按需选择,需要线程安全时,选择Collections.synchronizedMap()或Collections.synchronizedSortMap(),

    线程相关的三种版本

    synchronizedMap为整个散列表加锁;ConcurrentHashMap采用分段锁,将散列表分割成16个散列桶,每个线程只锁一个桶。

  • 相关阅读:
    【转载】Allegro Auto Rename器件反标注教程
    FPGA代码设计规范整理
    Cadence Allegro导网表的错误问题解决
    简单玩转Excel排序、筛选、分类汇总与数据透视表功能!
    zt一篇教会你写90%的shell脚本
    zt一篇教会你写90%的shell脚本
    TCP协议理解
    zt 改进TCP,阿里提出高速云网络拥塞控制协议HPCC
    zt TCP的困境与解决方案
    ztGoogle's BBR拥塞控制算法如何对抗丢包
  • 原文地址:https://www.cnblogs.com/deolin/p/7073040.html
Copyright © 2011-2022 走看看