集合

                                       

 

Map

  HashMap

    HashMap的初始容量为16。 扩容因子 默认 0.75 , 可以改。 扩容时是当前容量翻倍即:capacity*2。  查询效率 jdk 1.7 为 O(N), jdk 1.8 为 O(lgN)

  HashTable

    初始容量为11。扩容因子 默认 0.75 , 可以改。扩容时是容量翻倍+1即:capacity*2+1。

  ConcurrentHashMap

    初始容量为16。 扩容因子 默认 0.75 , 不可以改。 扩容时是当前容量翻倍即:capacity*2

List

  Arraylist 

    线程不安全。 初始容量是10。 扩容倍数是 1.5 + 1, 即初始为10, 扩容后为16。 

  Vector

    线程安全。 初始容量为10,一次扩容后容量为20

Set

  HashSet

    线程不安全,存取速度快。初始容量为16, 加载因子为0.75

    去重原理:1、通过 key的hash值 & (length - 1) 对比 下标; 2、equal 比较对象中的值是否一致

  TreeSet

    线程不安全, 底层是红黑树

    去重原理 :  java提供了一个Comparable接口,该接口里定义了一个compareTo(Object obj)方法,该方法返回一个整数值,实现该接口的类必须实现该方法,实现了该接口的类的对象就可以比较大小 

          应用:类实现compareable接口,覆写其compareto方法,根据自己的需要改变其排序及去重规则,比如person类,根据其年龄进行去重和排序。

  EnumSet

    线程不安全

        HashSet的性能总是比TreeSet好(特别是最常用的添加、查询元素等操作),因为TreeSet需要额外的红黑树算法来维护集合元素的次序。只有当需要一个保持排序的Set时,使用TreeSet,其他情况都应该使用HashSet。

 

ArrayList 和 LinkedList 时间复杂度

     

 

 

        注: 1、在 add(index, E) 中,ArrayList 和 LinkedList 的 查询时间复杂性 和 插入时间复杂度的区别

      2、在 remove(index, E) 中,ArrayList 和 LinkedList 的 查询时间复杂性 和 插入时间复杂度的区别

     3、get(index), ArrayList 和 LinkedList 的 查询时间复杂性

 

 

  ArrayList 是线性表(数组)
  get() 直接读取第几个下标,复杂度 O(1)
  add(E) 添加元素,直接在后面添加,复杂度O(1)
  add(index, E) 添加元素,在第几个元素后面插入,后面的元素需要向后移动,复杂度O(n)
  remove()删除元素,后面的元素需要逐个移动,复杂度O(n)

  LinkedList 是链表的操作
  get() 获取第几个元素,依次遍历,复杂度O(n)
  add(E) 添加到末尾,复杂度O(1)
  add(index, E) 添加第几个元素后,需要先查找到第几个元素,直接指针指向操作,复杂度O(n)
  remove()删除元素,直接指针指向操作,复杂度O(1)

----------------------------------------

【1】 http://blog.sina.com.cn/s/blog_166b17f020102wzs6.html

 

posted @ 2020-10-17 10:32  抽象Java  阅读(73)  评论(0编辑  收藏  举报