当前位置:网站首页>2022-08-05 第五小组 顾祥全 学习笔记 day29-集合
2022-08-05 第五小组 顾祥全 学习笔记 day29-集合
2022-08-05 20:53:00 【激进的韭菜】
集合
学习内容
什么是集合?
- 集合其实就是一个容器,用来存放引用类型的数据
- 使用不同的集合等同于使用不同的数据结构
集合用来存放什么?
- 集合中存放了引用(对象的内存地址),集合不能存储基本数据类型
集合分类
- 以单个的方式存储元素 ——> java.util.Collection(超级父接口)
- 以键值对的方式存储元素 ——> java.util.Map(超级符接口)
Collection集合
以单个的方式存储元素
Collection集合继承关系
Iterator接口
想要迭代集合就得先了解集合的迭代器Iterator
- 包路径: java.util.Iterator<E>
- 方法:
| 方法 | 功能 |
|---|---|
| boolean hasNext() | 判断迭代器指向的集合中是否还有元素可迭代 |
| E next() | 返回迭代的下一个元素 |
| void remove() |
迭代集合
通过Collection集合继承结构图可以看出,Colletion集合实现了Iterable接口,表示所有的集合都是可迭代的,每个集合都有一个iterator()方法,集合调用这个方法会返回一个迭代器(Iterator),下面我们用ArrayList集合来测试一下这个迭代器
public static void main(String[] args) {
// 给arrayList初始化容量5
ArrayList arrayList = new ArrayList(5);
arrayList.add("1");
arrayList.add("2");
arrayList.add("3");
// 获取集合的迭代器
Iterator it = arrayList.iterator();
// 迭代集合,并向控制台输出集合中的元素
while (it.hasNext()) {
Object obj = it.next();
System.out.println(obj);
}
}
对于迭代器Iterator的底层工作原理是怎样的呢,我们来看下面的这张图片
Colleciton接口
- 包路径:java.util.Collection
- 方法:

List接口
- 包路径: java.util.List
- List接口特有方法

ArrayList类
- ArrayList集合采用了数组这种数据结构,底层实际是一个Object[]
- ArrayList集合默认容量为10,在添加第一个元素时将这个默认容量给底层数组
- ArrayList集合扩容:扩容到原先的1.5倍
- 数组这种数据结构优缺点:
- 优点:检索元素效率极高,因为数组元素在内存中存储是连续的,并且数组中每个元素所占空间大小都是相同的。我们知道了数组的内存地址,知道了数组元素的下标,知道了数组元素所占字节大小,就可以通过一个数学表达式计算出指定下标元素的内存地址,所以数组检索元素效率极高
- 缺点:随机增删效率较低,为了保证数组元素在内存中是连续的这种特点,我们随机添加或删除一个元素,会涉及到后面所有元素整体向前或向后位移操作,所以效率较低;不不能存储大容量数据,因为很难在内存空间中找到一份大且连续的空间
ArrayList集合的默认容量
通过注释我们可以了解到ArrayList底层是elementData(Object[]),并且在添加第一个元素时,任何elementData == DEFAULTCAPACITY_EMPTY_ELEMENTDATA都将扩展为DEFAULT_CAPACITY
我们来看具体代码
结论: ArrayList集合默认容量为10,在添加第一个元素时将这个默认容量给底层数组
LinkedList类
- 底层采用了双向链表这种数据结构
- 无默认容量
- 双向链表这种结构的优缺点
- 优点:随机增删元素效率较高,由于双向链表中的元素(节点)在内存空间中的内存地址是不连续的,随机增删元素并不涉及到整体元素位移操作,所以效率高
- 缺点:检索元素效率极低,由于双向链表中的元素(节点)在内存空间中的内存地址是不连续的,想要检索一个元素需要从头节点开始依此遍历,所以效率极低
Vector类
- 底层采用了数组这种数据结构
- 默认容量为10
- 数组扩容:扩容原来的2倍
- 与ArrayList的区别 ----> 线程安全(Vector中所有的方法都被synchronized关键字修饰)
已过时,由于Verctor中的方法都被synchronized修饰所以效率较低,现在保证线程安全有其他的方式了。----> 使用java.util.Collections中的静态方法
Set接口
Set集合存储元素的特点:无序无可重复
- 包路径:java.util.Set
- 方法
HashSet类
- HashSet集合底层采用了哈希表这种数据结构
- HashSet在实例化时,底层实际实例化了个HashMap
- 往HashSet集合中存储元素,实际存放到了HashMap集合的key部分
SortedSet接口
SortSet集合中继承了HashSet接口的特点(也是无序不可重复的),并且SortSet集合中的元素都是可排序的(自动排序)
TreeSet类
- TreeSet集合底层采用了二叉树这种数据结构
- TreeSet在实例化时,底层实际实例化了个TreeMap
- 往TreeSet集合中存储元素实际时存放到了TreeMap集合的key部分
Map集合
Map中的集合都是以键值对的方式存储元素
Map集合继承关系
Map接口
**
HashMap类
- HashMap集合底层采用了哈希表这种数据结构
Hashtable类
- Hashtable集合底层采用了哈希表这种数据结构
- Hashtable集合和HashMap集合区别 ----> Hashtable是线程安全的(Hashtable中的方法都有synchronized关键字修饰),现在保证线程安全有更好的方式了,Hashtable已过时
Properties类
- Properties集合继承了Hashtable集合,所以Properties也是线程安全的
- Properties集合中的key和value部分只能是String类型
SortedMap接口
- SortedMap接口继承了Map接口的特点(无序不可重复)
- SortedMap集合中元素都是可排序的(根据key部分自动排序)
SortedMap类
UML类图
Collection集合

Map集合

边栏推荐
- 使用Compose实现基于MVI架构、retrofit2、支持 glance 小部件的TODO应用
- 信息系统项目管理师必背核心考点(六十二)项目组合治理主要过程
- 五、kubeadm高可用
- Rust学习笔记:2.1-2.3 猜数游戏
- Notes of a grandfather who loves watching square dancing----strip command
- Win10 开机系统蓝屏代码0xc0000098,ntfs.sys损坏或丢失
- 信息系统项目管理师---第十一章项目风险管理
- 第十五天(上)&poetman的上传和下载
- At this stage, how do you grasp the opportunities in the metaverse NFG industry?
- SwiftUI case: 3D rotating picture player
猜你喜欢

【广告电商】全球排行榜前十的广告投放有哪些公司?

ctfshow 反序列化篇(下)

SynthText流程解读 - 不看代码不知道的那些事

Technology Insider | StarRocks Community Champion and Alibaba Cloud technical experts interpret the implementation of Optimizer

国产手机羡慕,中国年轻人追捧iPhone,推动苹果成最赚钱科技企业

mpls comprehensive experiment

【SVN】搭建一个代码版本控制器(SVN)

泰山OFFICE技术讲座:按照WORD的做法,底纹高亮边框的效果示意图

【StoneDB子查询优化】subquery子查询-优化exists场景的join查询优化器的处理-100GB数据量测试

MySQL主从复制原理和使用
随机推荐
理财产品最低持有份额是什么意思?
SwiftUI案例:自定义加载动画
SynthText流程解读 - 不看代码不知道的那些事
OpenSSL公私钥证书哪些事儿
[Advertising E-commerce] Which are the top ten advertising companies in the world?
爱看广场舞的老爷爷的笔记----strip命令
哈希表系列⑤ -- 四数相加 II
Pytest Learning - The Best Way to Use Fixture
指南针股票软件使用安全可靠吗?听说可以支持证券登录
字符串拼接
如何设置跨域隔离启用 SharedArrayBuffer
Taishan OFFICE Technical Lecture: When the same borders are adjacent to each other, it is reasonable and unreasonable to merge
【学习笔记】AGC035
Shell案例: jumpserver跳板机
张忠谋认为美国巨资补贴难补落后,先进工艺不是用钱能搞定的
【opencv图像处理】-- 7. 图像金字塔与直方图
【opencv图像处理】-- 8. 特征点检测:Harris,shi-tomasi,SIFT角点检测,关键点和描述子
测试1111
Win10 Anaconda 虚拟环境安装 Pytorch GPU 2022-7-24
js校验日期时间的正则表达式



