• 集合-体系


    List有序,可重复

    ArrayList

    优点:底层数据结构是数组,查询快,增删慢

    缺点:线程不安全,效率高

    Vector

    优点:底层数据结构是数组,查询快,增删慢

    缺点:线程安全,效率低

    LinkedList

    优点:底层数据结构是链表,查询慢,增删快

    缺点:线程不安全,效率高

    Set无序,唯一

    HashSet

    底层数据结构是哈希表,无序,唯一

    如何保证元素唯一性?

    1.依赖两个方法:hashCode()和equals()

    LinkedHashSet

    底层数据结构是链表和哈希表。FIFO插入有序,唯一

    1.由链表保证元素有序

    2.由哈希表保证元素唯一

    TreeSet

    底层数据结构是红黑树。唯一,有序

    1.如何保证元素排序?

    自然排序比较器排序

    2.如何保证元素唯一性?

    根据比较的返回值是否为0来决定

    Map接口

    HashMap

    1.HashMap的底层数据结构

    2数组:查找容易,通过index快速定位;插入和删除困难,需要移动插入和删除位置之后的节点;

    链表:查找困难,需要从头节点或尾结点开始遍历,直到寻找到目标节点;插入和删除容易,只需修改目标节点前后节点的next或prev属性即可;

    HashMap巧妙的将数组和链表结合在一起,发挥两者各自的优势,使用一种叫“拉链法”的方式来解决哈希冲突。

    首先通过index快速定位到索引位置,这边利用了数组的优点;然后遍历链表找到节点,进行节点的新增/修改/删除操作,这边利用了链表的优点。

    LinkedHashMap和TreeMap排序的区别

    LinkedHashMap和TreeMap都是提供了排序支持的Map,区别在于支持的排序方式不同:

    LinkedHashMap:保存了数据的插入排序,也可以通过参数设置,保存数据的访问顺序

    TreeMap:底层是红黑树实现,可以指定比较器(Comparator比较器),通过重写compare方法来自定义排序;如果没有指定比较器,TreeMap默认是按key的升序排序(如果key没有实现Comparable接口,则会抛异常)。

    HashMap和Hashtable的区别?

    HashMap允许key和value为null,Hashtable不允许。

    HashMap的默认初始容量为16,Hashtable为11.

    HashMap的扩容为原来的2倍,Hashtable的扩容为原来的2倍加1

    HashMap是非线程安全的,Hashtable是线程安全的,使用synchronized修饰方法实现线程安全。

    HashMap的hash值重新计算过,Hashtable直接使用hashcode

    HashMap去掉了Hashtable中的contains方法

    HashMap继承自AbstractMap类,Hashtable继承自Dictionary类。

    HashMap的性能比Hashtable高,因为Hashtable使用synchronized实现线程安全

    ArrayList和Vector的区别:

    Vector和ArrayList的实现几乎是一样的,区别在于:

    1)最重要的区别:Vector在方法上使用了synchronized来保证线程安全,同时由于这个原因,在性能上ArrayList会有更好的表现。

    2)Vector扩容后容量默认变为原来2倍,而ArrayList为原来的1.5倍。

    有类似关系还有:StringBuilder和StringBuffer,HashMap和Hashtable。

    ArrayList和LinkedList的区别?

    1.ArrayList底层基于动态数组实现,LinkedList底层基于双向链表实现。

    2.对于随机访问(按index访问,get/set方法):ArrayList通过index直接定位到数组对应位置的节点,而LinkedList需要从头结点或尾结点开始遍历,直到寻找到目标节点,因此在效率上ArrayList优于ArrayList。

    3.对于随机插入和删除:ArrayList需要移动目标节点后面的节点,而LinkedList只需要修改目标节点前后节点的next或prev属性即可,因此在效率上LinkedList由于ArrayList。

    4.对于顺序插入和删除:由于ArrayList不需要移动目标节点后面的节点,因此在效率上比LinkedList更好。

    5.两者都不是线程安全的

    6.内存空间占用:ArrayList的空间浪费主要体现在list列表的结尾会预留一定的容量空间,而LinkedList的空间花费则体现在他的每一个元素都需要消耗比ArrayList更多的空间。

    Collection与Collections的区别

    Collection:集合类的一个顶级接口,提供了对集合对象进行基本操作的通用方法。Collection接口的意义是为各种具体的集合提供了最大化的统一操作方式,常见的List与Set就是直接继承Collection接口。

    Collection:集合类的一个工具类/帮助类,提供了一系列静态方法,用于对集合中元素进行排序,搜索以及线程安全等各种操作

  • 相关阅读:
    计算机网络(5) ARP协议
    期货开户每日无负债结算制度
    java实现国密算法SM3摘要加密
    使用Boost C++库中的`boost::math`模块来查找正态分布的均值或标准差的示例
    【Microsoft Edge】如何彻底卸载 Edge
    (76)MIPI DSI LLP介绍(十六)
    需求管理手册-对需求管理者的要求(10)
    2022年0702 第八课 JAVA中的数据结构重中的集合
    go goroutine
    依赖:类之间的依赖关系【python】
  • 原文地址:https://blog.csdn.net/m0_53680228/article/details/126246981