zoukankan      html  css  js  c++  java
  • java集合:常用集合的数据结构

    List

    有序可重复

    ArrayList

    ArrayList数据结构是数组。查询快,增删慢。ArrayList是线程不安全的,允许元素为null 。

    Vector

    线程安全的数组,效率较差,已经过时不用。

    LinkedList

    LinkedList 数据结构是双向链表,插入删除比较方便。LinkedList 是线程不安全的,允许元素为null 。

    Map

    HashMap :

    jdk1.8中HashMap底层是哈希表数据结构,数组+链表+红黑树,HashMap是线程不安全的,允许使用null键和null值,

    HashMap根据键的HashCode值存储数据,具有很快的访问速度。

    HashMap存入的键值对在遍历时的顺序是随机的。

    HashMap不支持并发

    HashTable:

    线程安全,使用synchronized锁住全部数据,效率较低。

    LinkedHashMap:

    LinkedHashMap 是HashMap的一个子类,默认LinkedHashMap遍历时输出的顺序和put输入的顺序是相同的。

    LinkedHashMap有两种排序方式:插入排序和访问排序(修改或访问一个元素后,将该元素移到队列末尾),默认是插入排序。使用accessOrder来标记使用哪种排序方式,accessOrder==true时,表示使用访问排序,默认为false;

    LinkedHashMap使用了双向链表来保证了顺序性。

        public LinkedHashMap(int initialCapacity,
                             float loadFactor,
                             boolean accessOrder) {
            super(initialCapacity, loadFactor);
            this.accessOrder = accessOrder;
        }

    TreeMap:

    TreeMap底层是红黑树数据结构,线程不安全,可以用于给Map集合中的键进行排序

    TreeMap遍历出来的是排序后的键值对。

    ConcurrentHashMap

    ConcurrentHashMap是线程安全的,jdk1.8使用CAS和volatile实现。而jdk1.8以前通过锁分段技术、可重入锁实现。

    支持并发,可以一边更新一边遍历

    Set

    HashSet

    存放键值对,无序不重复。

  • 相关阅读:
    一个貌似比较吊的递归转换为loop--总算成功了.
    为何反转迭代顺序就不会栈溢出了?
    将树形递归转换为loop
    递归和迭代之间的转换简单例子
    非线性递归函数转化为迭代函数举例
    将尾递归函数转换为迭代函数的利器
    转:LINUX/UNIX下的回车换行与WINDOWS下的区别
    property干嘛的
    eval和列表解析的一处陷阱
    剑指offer——16二进制中1的个数
  • 原文地址:https://www.cnblogs.com/expiator/p/8478094.html
Copyright © 2011-2022 走看看