首页 > 编程知识 正文

linkedlist扩容,list和arraylist

时间:2023-05-04 08:10:22 阅读:31860 作者:2526

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语言专栏收录了这个内容

请你看了这个赞不绝口再走

如果有错误的话,请告诉我。 谢谢你。

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。