zoukankan      html  css  js  c++  java
  • java 集合

    需要唯一:set

        需要排序:TreeSet

               不需要:hashSet

        和存储顺序一样的:linkedHashSet

                 

    不需要唯一:list

             需要频繁的增删改:linkedList

             不需要:ArrayList,有序  arraylist 初始长度是10   超过10就会自动增长 公式 : ((旧容量 * 3) / 2) + 1

             线程安全:Vector ,有序

    前缀就是集合的数据结构:

        array:  联想到数组,查询快,有下标

        linked:联想到链表,增删改快

        hash:联想到hash表,唯一性,元素需要覆盖hashCode,equals方法

        tree:联想到二叉树,排序,2个接口:Comparable,Comparator;

    总结:

      List : 无序  可重复    线程不安全

               ArrayList  实现一个数组,它的规模可变并且能像链表一样被访问。它提供的功能类似Vector类但不同步,它是以Array方式实现的List,允许快速随机存取

               LinkedList实现一个链表,提供最佳顺序存取,适合插入和移除元素。由这个类定义的链表也可以像栈或队列一样被使用。提供最佳顺序存取合插入和移除元素

     Vector  线程安全  默认长度10  增长扩容公式是 原容量 + 原容量

    Map

    hashmap 默认长度是 16  

    加载因子为0.75:即当 元素个数 超过 容量长度的0.75倍 时,进行扩容

         扩容增量:原容量的 1 倍

          如 Hashmap的容量为16,一次扩容后是容量为32

    HashTable和HashMap采用相同的存储机制,二者的实现基本一致,不同的是:

              1)、HashMap是非线程安全的,HashTable是线程安全的,内部的方法基本都是synchronized。

         2)、HashTable不允许有null值的存在。 在HashTable中调用put方法时,如果key为null,直接抛出NullPointerException。其它细微的差别还有,比如初始化Entry数组的大小等等,但基本思想和HashMap一样。

      HashSet:

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

         2、HashSet是非线程安全的。

        3、HashSet不保证有序。

           

        默认初始容量为16(为何是16,见下方对HashMap的描述)

         加载因子为0.75:即当 元素个数 超过 容量长度的0.75倍 时,进行扩容

         扩容增量:原容量的 1 倍

          如 HashSet的容量为16,一次扩容后是容量为32

       HashMap:

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

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

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

        4、HashMap是非线程安全的。

        5、HashMap遍历使用的是Iterator HashTable

             HashTable

             1、HashTable是线程安全的。

        2、HashTable中无论是Key,还是Value都不允许为null。

        3、HashTable遍历使用的是Enumeration。

        ConcurrentHashMap

                  1.分段锁,就像表里面锁行一样,  hashTable 锁全表,所以ConcurrentHashMap性能最快

                  2 不允许key/value 为空

       ConcurrentHashMap 分段锁,分层N个segment,segment里面是hashentry 数组,相当于一个hashmap,segment继承ReentrantLock 实现锁,segment对象本身就是锁。

      

    HashMap put 方法返回被覆盖的值

    从数组(通过hash值)取得链表头,然后通过equals比较key,如果相同,就覆盖老的值,并返回老的值。(该key在hashmap中已存在) 

     

    TreeSet: 1、TreeSet基于TreeMap实现,支持排序。 2、TreeSet是非线程安全的。 从对HashSet和TreeSet的描述来看,TreeSet和HashSet一样,也是完全基于Map来实现的,并且都不支持get(int)来获取指定位置的元素(需要遍历获取),另外TreeSet还提供了一些排序方面的支持。例如传入Comparator实现、descendingSet以及descendingIterator等。 TreeMap: 1、TreeMap是一个典型的基于红黑树的Map实现,因此它要求一定要有Key比较的方法,要么传入Comparator实现,要么key对象实现Comparable接口。 2、TreeMap是非线程安全的。

  • 相关阅读:
    【原创】FltGetFileNameInformation蓝屏分析
    【原创】调用系统函数里面蓝屏例子
    【原创】FltSendMessage蓝屏分析
    RES协议和断网访问URL出现的错误页面
    绕过本机DNS缓存
    异步机制
    异步机制
    异步机制
    异步机制
    异步机制
  • 原文地址:https://www.cnblogs.com/interfacehwx/p/5492811.html
Copyright © 2011-2022 走看看