zoukankan      html  css  js  c++  java
  • Java常用集合比较

    1. ArrayList

      基于数组方式实现,无容量的限制。

      在执行插入元素时可能要扩容,在删除元素时并不会减少数组的容量。

      如果希望相应的缩小数组容量,可以调用trimToSize()

      在查找元素时要遍历数组,对于非null的元素采取equals的方式寻找。

      非线程安全。

    2. LinkedList

      基于双向链表机制实现。

      元素的插入、移动较快。

      非线程安全。

    3. Vector

      基于Object数组的方式来实现的。

      基于synchronized实现的线程安全的ArrayList。

      在插入元素时容量扩充的机制和ArrayList稍有不同:
      如果capcacityIncrement > 0, 则Object数组的大小扩大为现有size加上capcacityIncrement;
      如果capcacityIncrement < 0, 则Object数组的大小扩大为现有size的两倍;

    4. Stack

      基于Vector实现,支持LIFO。

    5. HashSet

      基于HashMap实现,无容量限制。

      不允许元素重复。

      非线程安全。

    6. TreeSet

      基于TreeMap实现,支持排序。

      非线程安全。

    7. HashMap

      采用数组方式存储key、value构成的Entry对象,无容量限制。

      基于key hash寻找Entry对象存放到数组的位置,对于hash冲突采用链表的方式来解决。

      在插入元素时可能会扩大数组的容量,在扩大容量时会重新计算hash,并复制对象到新的数组中。

      非线程安全。

    8. TreeMap

      基于红黑树实现,无容量限制。

      非线程安全。

    -----------------------------------
    适用场景:

      对于查找和删除较为频繁,且元素数量较多的应用,Set或Map是更好的选择;

      ArrayList适用于通过为位置来读取元素的场景;

      LinkedList 适用于要头尾操作或插入指定位置的场景;

      Vector 适用于要线程安全的ArrayList的场景;

      Stack 适用于线程安全的LIFO场景;

      HashSet 适用于对排序没有要求的非重复元素的存放;

      TreeSet 适用于要排序的非重复元素的存放;

      HashMap 适用于大部分key-value的存取场景;

      TreeMap 适用于需排序存放的key-value场景。

  • 相关阅读:
    texturePacker黄色文件夹和蓝色文件夹
    自定义相机下使用clippingNode注意事项
    cocos2dx 3.3多相机下_transformUpdated bug
    一定不要在头文件中using namespace XXX
    cocos2dx 3.3将坐标由父空间转化到局部空间
    cocos2dx 3.3 getParentToNodeTransform bug
    cocos2dx 3.x designResolutionSize须主动设置
    mysql操作查询结果case when then用法举例
    java List.subList方法中的超级大陷阱
    Linux下修改Mysql的用户(root)的密码
  • 原文地址:https://www.cnblogs.com/linjiqin/p/1950934.html
Copyright © 2011-2022 走看看