• Java集合框架最全详解(看这篇就够了)


    Java集合体系框架

    Java集合类主要由两个根接口Collection和Map派生出来的。

    Collection派生出了三个子接口:

    1)List

    List代表了有序可重复集合,可直接根据元素的索引来访问

    2)Set

    Set代表无序不可重复集合,只能根据元素本身来访问

    3)Queue

    Queue是队列集合

    Map接口派生:

    Map代表的是存储key-value对的集合,可根据元素的key来访问value。

    因此Java集合大致也可分成List、Set、Queue、Map四种接口体系

    Java集合List

    List代表了有序可重复集合,可直接根据元素的索引来访问。

    List接口常用的实现类有:ArrayList、LinkedList、Vector。

    List集合特点

    • 集合中的元素允许重复
    • 集合中的元素是有顺序的,各元素插入的顺序就是各元素的顺序
    • 集合中的元素可以通过索引来访问或者设置

    ArrayList

    ArrayList是一个动态数组,也是我们最常用的集合,是List类的典型实现。

    它允许任何符合规则的元素插入甚至包括null,每一个ArrayList都有一个初始容量(10),该容量代表了数组的大小。

    随着容器中的元素不断增加,容器的大小也会随着增加,在每次向容器中增加元素的同时都会进行容量检查,当快溢出时,就会进行扩容操作。

    所以如果我们明确所插入元素的多少,最好指定一个初始容量值,避免过多的进行扩容操作而浪费时间、效率。

    ArrayList擅长于随机访问,同时ArrayList是非同步的。

    Vector

    与ArrayList相似,但是Vector是同步的,它的操作与ArrayList几乎一样。

    LinkedList

    LinkedList是采用双向循环链表实现,LinkedList是List接口的另一个实现,除了可以根据索引访问集合元素外,LinkedList还实现了Deque接口,可以当作双端队列来使用,也就是说,既可以当作“栈”使用,又可以当作队列使用。

    Java List总结

    1)ArrayList
    优点: 底层数据结构是数组,查询快,增删慢。
    缺点: 线程不安全,效率高

    2)Vector
    优点: 底层数据结构是数组,查询快,增删慢。
    缺点: 线程安全,效率低

    3)LinkedList
    优点: 底层数据结构是链表,查询慢,增删快。
    缺点: 线程不安全,效率高

    Java集合Set

    Set扩展Collection接口,无序集合,不允许存放重复的元素。

    Set接口常用的实现类有:HashSet、LinkedHashSet、TreeSet

    HashSet

    HashSet是Set集合最常用实现类,是其经典实现。

    HashSet底层数据结构采用哈希表实现,元素无序且唯一,线程不安全,效率高,可以存储null元素,元素的唯一性是靠所存储元素类型是否重写hashCode()和equals()方法来保证的,如果没有重写这两个方法,则无法保证元素的唯一性。

    LinkedHashSet

    底层数据结构采用链表和哈希表共同实现,链表保证了元素的顺序与存储顺序一致,哈希表保证了元素的唯一性。

    TreeSet

    底层数据结构采用二叉树来实现,元素唯一且已经排好序,唯一性同样需要重写hashCode和equals()方法,二叉树结构保证了元素的有序性。

    Java Set总结

    1)HashSet

    • 底层其实是包装了一个HashMap实现的
    • 底层数据结构是数组+链表 + 红黑树
    • 具有比较好的读取和查找性能, 可以有null 值
    • 通过equals和HashCode来判断两个元素是否相等
    • 非线程安全

    2)LinkedHashSet

    • 继承HashSet,本质是LinkedHashMap实现
    • 底层数据结构由哈希表(是一个元素为链表的数组)和双向链表组成。
    • 有序的,根据HashCode的值来决定元素的存储位置,同时使用一个链表来维护元素的插入顺序
    • 非线程安全,可以有null 值

    3)TreeSet

    • 是一种排序的Set集合,实现了SortedSet接口,底层是用TreeMap实现的,本质上是一个红黑树原理
    • 排序分两种:自然排序(存储元素实现Comparable接口)和定制排序(创建TreeSet时,传递一个自己实现的Comparator对象)
    • 正常情况下不能有null值,可以重写Comparable接口 局可以有null值了。

    Java集合Queue

    队列是数据结构中比较重要的一种类型,它支持 FIFO,尾部添加、头部删除(先进队列的元素先出队列),跟我们生活中的排队类似。

    PriorityQueue

    PriorityQueue保存队列元素的顺序并不是按照加入的顺序,而是按照队列元素的大小进行排序的。
    PriorityQueue不允许插入null元素。

    Deque

    Deque接口是Queue接口的子接口,它代表一个双端队列,当程序中需要使用“栈”这种数据结构时,推荐使用ArrayDeque。

    Java集合Map

    Map用于保存具有映射关系的数据,Map里保存着两组数据:key和value,它们都可以使任何引用类型的数据,但key不能重复。

    1.HashMap

    Map接口基于哈希表的实现,是使用频率最高的用于键值对处理的数据类型。

    它根据键的hashCode值存储数据,大多数情况下可以直接定位到它的值,特点是访问速度快,遍历顺序不确定,线程不安全,最多允许一个key为null,允许多个value为null。

    可以用 Collections的synchronizedMap方法使HashMap具有线程安全的能力,或者使用ConcurrentHashMap类。

    2.Hashtable

    Hashtable和HashMap从存储结构和实现来讲有很多相似之处,不同的是它承自Dictionary类,而且是线程安全的,另外Hashtable不允许key和value为null,并发性不如ConcurrentHashMap。

    Hashtable不建议在新代码中使用,不需要线程安全的场合可以用HashMap替换,需要线程安全的场合可以用ConcurrentHashMap替换。

    3.LinkedHashMap

    LinkedHashMap继承了HashMap,是Map接口的哈希表和链接列表实现,它维护着一个双重链接列表,此链接列表定义了迭代顺序,该迭代顺序可以是插入顺序或者是访问顺序。

    4.TreeMap

    TreeMap实现SortMap接口,能够把它保存的记录根据键排序,默认是按键值的升序排序(自然顺序),也可以指定排序的比较器,当用Iterator遍历TreeMap时,得到的记录是排过序的。

    5.Map总结

    更多架构技术干货,私信【架构】即可查看我原创的300期+BAT架构技术系列文章与1000+大厂面试题答案合集。

    先自我介绍一下,小编13年上师交大毕业,曾经在小公司待过,去过华为OPPO等大厂,18年进入阿里,直到现在。深知大多数初中级java工程师,想要升技能,往往是需要自己摸索成长或是报班学习,但对于培训机构动则近万元的学费,着实压力不小。自己不成体系的自学效率很低又漫长,而且容易碰到天花板技术停止不前。因此我收集了一份《java开发全套学习资料》送给大家,初衷也很简单,就是希望帮助到想自学又不知道该从何学起的朋友,同时减轻大家的负担。添加下方名片,即可获取全套学习资料哦

  • 相关阅读:
    动态规划和递归法求解斐波那契数列
    Linux系统中毒,应急方法
    【Proteus仿真】【51单片机】电蒸锅温度控制系统
    您的计算机已被Mallox勒索病毒感染?恢复您的数据的方法在这里!
    MySQL_Note8
    出海有“云”!华为云全球加速助力跨国企业提升网络体验
    K8S集群部署问题及处理记录
    机器视觉兄弟们,新工作之前,不要过度准备
    Springboot搭建微服务案例之Eureka注册中心
    MySQL --- 常用函数 - 字符串函数
  • 原文地址:https://blog.csdn.net/m0_67391521/article/details/126059819