常用集合

集合

​ 常用的集合如下:

在这里插入图片描述

List

​ 继承Collection接口,下面有ArrayList、LinkedList。


ArrayList

​ ArrayList底层采用动态数组实现


​ 如果没有指定长度,则默认长度为0,当插入数据时,长度将变为10,当数据量大于当前长度时,将会扩容

​ 扩容:会创建一个长度为1.5倍的新数组,并将当前数组的元素拷贝到新数组中,当前数组的内存被释放


​ 插入:有序的,从头部开始往后依次插入

​ 删除:删除该元素,该元素以后的元素会前移一个位置

​ 查询:根据数组下标快速访问数组中的元素

ArrayList在存储和删除时效率比较低,但在查询遍历时效率非常高

LinkedList

​ LinkedList底层采用双向链表实现


​ 没有容量大小的定义,每个元素都有prev节点,next节点(指向上一个/下一个元素)


​ 插入:需要修改要插入位置的前一个元素的next值和后一个元素的prev值即可

​ 删除:需要修改前一个元素的next值指向后一个元素,后一个元素的prev值指向前一个元素即可

​ 查询:需要从头到尾依次遍历,直到找到为止


LinkedList在存储和删除时效率较高,但在查询时效率比较低

Map

​ Map下面有HashMap、TreeMap,键值对式存储(key-value)

HashMap

​ hashMap基于哈希表,由数组、链表、红黑树组成

​ 如果没有指定长度,则默认长度为0,当插入数据时,长度将变为16,(加载因子为0.75)当数据量大于当前长度的3/4时,将会扩容为原来的2倍,最大容量:2^30

​ 当同一个位置的元素数量大于1时,由数组变为链表,当大于8时,由链表变为红黑树

​ 同理,当元素数量小于6时,红黑树变为链表,当元素小于2时,变回数组

​ 添加(put)如下图:

在这里插入图片描述

TreeMap

​ 底层采用红黑树实现,所以没有容量和扩容的说法,有序的。

​ 有序:如果key是自然数,就按照大小排序;如果是对象,则按照hash值进行排序

Set

​ Set接口是Conllection的子接口,下面有HashSet、TreeSet

​ 存储的元素是无序的,不可重复的,只有add方法,没有get方法

HashSet

​ 底层采用哈希表实现的,实际上是一个HashMap,无序,不可重复

​ 判断是否相同元素:计算hashcode和equals,两个都相同才算相同

TreeSet

​ 底层采用红黑树实现,实际上是一个TreeMap,无序,不可重复

​ 判断是否相同元素:compareTo方法的返回值,0为重复

三者区别

  1. List 集合中对象是有序的,可以有重复对象
  2. Map 集合中每个元素以键值对(key - value)存储,键不可以重复,值可以重复
  3. Set 集合中对象是无序的,没有重复的对象
  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值