Java容器


在Java中有着一种专门存放对象或对象引用的类,叫做容器类,或者叫集合类
容器类并不是特指某个类。按照一定的存储方式对对象进行存储的类都叫容器类。
而按照存储方式的不同可将容器类分为两种
1:实现collection接口的类:定义独立元素的序列
2:实现Map接口的类:定义成对的键值(key-value),并且map不能有重复的key

collection容器

collection可以继续细分为三种子接口
1:list:该集合内元素为有序可重复//如数组链表
2:set:该集合内元素为无序不可重复//注意!set在存储元素时并非顺序存储,而且重复元素不会进行添加
3:queue:该集合内元素为先进先出//队列

list容器

list容器的三个重要容器类

ArrayList

动态数组类,内部数据结构由数组实现,该类实现了元素的快速随机访问,但是在删除或添加元素时需要移动大量的元素,因此不适合频繁的删除和增加

Vector

向量类,跟ArrayList基本一致,但有一点不同,Vector类的每一个方法都加了同步锁,好处是线程安全,坏处是访问速度要比ArrayList慢

LinkedList

链表类,内部数据结构是链表,该类实现了元素方便快速修改,但降低了访问速度,适合修改元素频繁的场景

set容器

set容器有两个重要的实现类

HashSet

该类封装了HashMap,在向HashSet中添加元素时,先判断容器内是否已经有该元素,没有该元素才添加,这个过程是线程不安全的,并且不保证顺序不变

TreeSet

该类封装了TreeMap,在添加元素时会考虑顺序(这点与HashSet不同),并且同样不保证线程安全,不允许存在null

queue容器

queue容器实现了队列的存储结构,遵循先进先出的原则

Map容器

Map容器有两个重要的实现类

HashMap

该类是由数组链表和红黑树实现的,数组中存放的是单链表的引用,也就是说数组的大小就是单链表的多少,当链表的长度大于8时,链表存储会改为红黑树存储。

为什么要引入红黑树:在链表中查找元素时间复杂度为O(n)。而红黑树在查找时时间复杂度为O(logn),在链表长度较少时没有影响,当链表长度过多时,引入红黑树存储能提高读取速度

当元素想要添加进HashMap时,先调用hashCode()计算key值,根据key找到对应的链表,若链表中存在该值,则丢弃,若不存在,则添加进去

HashTable

与HashMap基本类似,不同点在于HashTable是线程安全的,但会造成性能损失

Iterator

Iterator是迭代器,它能在不知道容器内元素类型的情况下遍历所有元素,不属于Colletion和Map接口体系

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值