• 集合


                                           

    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

  • 相关阅读:
    重学数据库
    小炒肉
    地三鲜
    mac安装使用visualbox不能启动
    idea Services dashboard
    C# 使用Linq问题
    IDEA 修改页面不重启
    idea提交代码失败
    Idea git 强制同步fork的项目,会覆盖本地上传的文件吗?
    了解swagger遇到的问题
  • 原文地址:https://www.cnblogs.com/Jomini/p/13830142.html
Copyright © 2020-2023  润新知