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个散列桶,每个线程只锁一个桶。

  • 相关阅读:
    【go语言】Windows下go语言beego框架安装
    分页
    MongoDB用户与权限管理
    MongoDB安装在Centos7下安装
    centos7安装mysql5.7.33 tar包方式
    文件路径分隔符
    python之批量打印网页为pdf文件
    Python驱动SAP GUI完成自动化(五)
    动态内存与智能指针
    关联容器
  • 原文地址:https://www.cnblogs.com/deolin/p/7073040.html
Copyright © 2011-2022 走看看