Java容器

什么是容器?
乍一听,好难、好深奥的玩意
“容器”其实就是一种用来存储数据的数据结构
就是平时我们用来放数据的一些集合(set)、列表(list)、映射(map),姑且叫它们容器类,集合类

为什么用容器?
我们都知道数组的长度是固定,而且数组存放的数据类型是一样的,所以容器就解决了这两个弊端

容器类

Conllection
set
list
HashSet
ArrayList
LinkedList
map
HashMap

ArrayList:底层是基于动态数组,它是按顺序存数据,它向尾部放数据效率高,根据下标随机访问数组元素的效率高。

LinkedList:基于链表的动态数组、通过一个双向链表来实现的,数据添加删除效率高,只需要改变指针指向即可,但是访问数据的平均效率低,需要对链表进行遍历。

HashSet:无序的,不可重复的;允许存放null值;底层封装HashMap;实现是不同步的,线程不安全;
要想在hashSet集合中实现元素存取的唯一性,由于底层判断依赖于equals和hashCode方法,故所存取的元素需要重写这两个方法,以按照我们的期待存取元素。保证元素唯一性

HashMap:通过键值对映射,非线程安全的,速度快,是一个散列桶,有ArrayList和LinkedList所有优点,可以放null 值

容器的扩容
容器都会自动扩容
ArrayList:初始化大小是 10
扩容机制:容量用完了自动扩容到1.5倍

LinkedList:没有初始化大小,也没有扩容的机制,就是一直在前面或者后面新增就好

HashMap:初始化大小是 16 ,扩容因子默认0.75(可以指定初始化大小,和扩容因子)
扩容机制:当前大小 和 当前容量 的比例超过了 扩容因子,就会扩容,扩容后大小为 一倍。例如:初始大小为 16 ,扩容因子 0.75 ,当容量为12的时候,比例已经是0.75 。触发扩容,扩容后的大小为 32

HashSet:底层即HashMap,所以初始大小,扩容机制和HashMap一样

LinkedList和ArrayList

为什么LinkedList比ArrayList增加删除快
因为ArrayList存数据是:数组+数据 数组即它的下标,所以它增加删除时, 要对数组进行复制的操作,特别根据位置添加删除这种操作,想想是不是都觉得复杂
而LinkedList就是插队,而且它有一个特性,就是它会判断你给的位置是在前半段,还是后半段。然后决定从前面操作,还是从后面开始操作

为什么ArrayList比LinkedList查询快
因为ArrayList有下标,可以根据下标直接拿到值,而LinkedList没有下标,只能通过遍历链表来拿到第index个数据

至于尾部添加,LinkedList 存数据是new 一个Node对象,所以当ArrayList没有触发扩容时要快些

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值