集合框架 以及 底层数据结构

本文介绍了Java集合框架的由来,对比了数组与集合的区别,强调集合长度的可变性。根据需求选择集合,如Map接口用于键值对,List接口用于有序元素,Set接口用于唯一元素。深入探讨了ArrayList、Vector、LinkedList、HashSet、TreeSet等集合的实现和特性。此外,还详细阐述了HashMap、LinkedHashMap、HashTable和TreeMap的底层结构和性能特点。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一,集合的由来:
    数组长度是固定的,当添加的元素超过了数组的长度时需要对数组重新定义,太麻烦,Java内部给我们提供了集合类,能存储任意对象,长度是可以改变的,随着元素增加而增加,随元素减少而减少
数组与集合的区别:
    1:基本数据类型存储的是值,引用数据类型存储的是地址值
        数组既可以存储基本数据类型,又可以存储引用型数据类型
          集合只能存储引用型数据类型(对象),集合中也能存储基本数据类型,但是存储的时候会自动封箱变成对象
    2:数组的长度是固定的,不能自动增长的
      集合长度是可变的,可以根据元素的增长而增长
    3:使用情况
        1.元素个数固定推荐使用数组
        2.元素个数不固定推荐使用集合

二,如何选用集合??

当遇到集合问题时往往不知如何选择集合,主要根据集合特点来选择,比如我们需要根据键值获取到元素值时就选用Map接口下的集合,需要排序时选择TreeMap,不需要排序时就选择HashMap,需要保证线程安全的就选用ConcurrentHsahMap。当我们只需要存放元素值时,就选择实现Collection接口的集合,需要保证元素唯一时选择实现Set接口的集合,比如TreeSet或HashSet,不需要就选择实现List接口,比如ArrayList或LinkedList,然后再根据实现这些接口的集合特点来选用,下面详细介绍集合特点。

三,集合框架体系图

四,Collectoin

    1.List

        ArrayList:Object数组实现

        Vector:    Object数组实现

        LinkedList:双向链表(JDK1.6前为循环链表,JDK1.7后取消循环)

    2.Set

        HashSet:  无序,唯一:基于HashMap实现,底层采用HashMap来保存元素

        LinkedHashSet :继承于HashSet,并且内部是通过LinkedHashMap来实现的

        TreeSet  : 有序,唯一: 红黑树(自平衡的排序二叉树)

五,Map

    1,HashMap :JDK1.8之前由数组+链表组成,数组为主体,链表则是主要为了解决哈希冲突而存在的(拉链法解决冲突)

                             JDK1.8由数组+链表+红黑树组成,以后当链表长度大于阈值时,将链表转换为红黑树,减少搜索时间

    2,LinkedHashMap继承自HashMap,所以底层是基于拉链式散列结构,即由数组和链表或红黑树组成,并在此结构上增加了一条双向链表,是上面结构可以保持简直对的插入顺序,同时通过对链表进行相应操作,实现了访问顺序相关逻辑

    3,HashTable 数组+链表组成,数组是HashMap的主体,链表解决哈希冲突

    4,TreeMap: 红黑树(自平衡的排序二叉树)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

§九千七§

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值