List集合
一.集合框架
1 .数组(可以存储多个数据,但必须从头开始定义数组大小,并且不能调整大小,除非创建新的大数组并组装当前数量)。
2 .集合(大小可变) ) )。
3 .收藏框架的顶层接口Collection (容器)、Collection的迭代器(迭代器)继承了Iterable
收集器和迭代器之间的关系依赖关系
迭代器提供的方法(hasNext、next、remove ) ) ) ) ) ) )。
hasNext判断是否存在以下要素
next将遍历位置下移,获取下移集合的对应元素
remove删除当前元素
要在循环中删除元素,如果foreacn不可用,则必须使用常规循环或迭代器
List (有规则)下标,可重复;一个元素可以占用多个空间) ) ) ) ) ) ) ) )。
实现类
ArrayList
载体
链接列表
Set (无序、不可重复) ) ) ) ) )。
UML图
集合的扩展机制在ArrayList中
什么时候扩大容量?
主要判断所需长度大小是否小于数组长度,数组长度小时扩展;
默认容量为10
扩展机制
增加因子原来容量的一半=新的序列(1.5倍),例如扩张前10 -扩张后15
向量扩展机制(扩展) ) ) ) ) )。
vector放大了两倍
1 .为什么要加倍,而不是一次增加一个固定大小的容量呢?
从比较可以看出,以加倍的方式扩展容量可以保证一定的时间复杂度,但是因为即使增加指定大小的容量也仅仅是o(n )的时间复杂度,所以以加倍的方式扩展容量。
为什么要用两倍而不是三倍四倍的方法放大呢? 还是其他方法呢?
为了避免浪费申请内存,目前常用的是两倍和1.5倍的增长方式,而1.5倍的增长方式可以更好地实现内存的重用。 为什么这么说,是因为更好。
List下的两种聚会
动态数组(Arrayli,Vector ) ) ) ) ) )。
链表(链接列表) )。
向左移动(二进制计算) )。
1 .运算规则:采用二进制形式将所有数字左移相应位数,进行高位移(舍弃),低位空位填零。
.语法形式:需要移位的数字移位次数,如3 ) 2是数字3向左移位两位的计算过程。 3 ) 2首先将3转换为二进制数字0000 0011,然后将该数字高位(左侧)的2个零移位,其他数字均向左移位2位,最后将0填入低位(右侧)的2个空位。 结果为0000 1100,如果转换为十进制,则为12。
|0000 0011|
00 |00 0011xx|
|00 001100|
注:红色是扔掉的部分,绿色是对齐的部分
数据结构
List常见问题
List有秩序吗? 怎么解释?
list的有序性是指按放入的顺序有秩序,而不是按照某种规则对放入的要素进行排序。 列表的最常见实现是ArrayList和链接列表,对ArrayList和链接列表的访问是按插入顺序进行的,列表是有序的。
ArrayList和Vector有什么区别?
ArrayList线程不安全,而且速度很快
Vector线程安全,速度慢
ArrayList动态数组
链接列表链表
ArrayList的默认大小是多少,是如何扩展的?
默认大小: 10
舒张因子: 1.5
ArrayList和链接列表有什么区别? 分别在什么场景下使用?
ArrayList查询很有效率
添加和删除链接列表(双向链表)效率很高
是否可以在forEach中使用集合的remove方法? 不行
如何删除集合元素? for循环/迭代器
链表与数组的区别(详细)如下
原文链接: https://blog.csdn.net/Weibo 1230123/article/details/82011889? UTM _ medium=distribute.PC _ relevant _ t0.none-task-blog-blogcommendfrommachinelearnpai2-1. nonecasedepth
收纳
c语言专栏收录了这个内容
请你看了这个赞不绝口再走
如果有错误的话,请告诉我。 谢谢你。