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

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

  • 相关阅读:
    RabbitMQ学习之:(一)初识、概念及心得
    给Eclipse_Android添加智能提示功能
    C#异步编程之:(三)使用TaskScheduler.UnobservedTaskException
    类设计技巧
    初始化块
    子类构造器
    静态域与静态方法
    构造器中调用另一个构造器
    重载
    无参数的构造器
  • 原文地址:https://www.cnblogs.com/expiator/p/8478094.html
Copyright © 2011-2022 走看看