List<E>集合接口特征、ArrayList与LinkedList使用注意及特征
时间:2022-07-28
本文章向大家介绍List<E>集合接口特征、ArrayList与LinkedList使用注意及特征,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
一、List集合接口特征
特征
有序,可重复
有序: 添加顺序和存储顺序一致
可重复:相同元素可以同时添加
List<E>接口下的实现类,存在一定的下标操作机制
ArrayList<E> 底层数组形式操作,可以通过下标直接访问
LinkedList<E> 底层是一个双向链表结构,下标 ==> 计数器
方法
增:
add(E e);
List接口下,当前方法是添加元素到集合的末尾,尾插法
addAll(Collection<? extends E> c);
List接口下,当前方法是添加另一个集合到当前集合末尾,要求添加的
集合中保存的元素和当前集合保存元素一致,或者说是当前集合保存元
素的子类
add(int index, E e);
在指定的下标位置,添加指定元素
addAll(int index, Collection<? extends E> c);
在指定的下标位置,添加指定的集合,集合要求同上一个addAll方法
删:
void clear();
清空整个集合
remove(Object obj);
删除集合中的指定元素
removeAll(Colletion<?> c);
删除两个集合的交集
retainAll(Colletion<?> c);
保留两个集合的交集
E remove(int index);
删除集合中指定下标的元素。返回值是被删除的元素
改:
E set(int index, E e);
使用指定元素替换指定下标index的元素,返回值是被替换掉的元素。
查:
int size();
有效元素个数
boolean isEmpty();
判断当前集合是否为空
boolean contains(Object obj);
boolean containsAll(Collection<?> c);
int indexOf(Object obj);
找出指定元素在集合中的第一次出现位置
int lastIndexOf(Object obj);
找出指定元素在集合中最后一次出现位置
E get(int index);
获取指定下标的元素
List<E> subList(int fromIndex, int endIndex);
获取当前集合的子集合
【特征】
获取数据的范围是 fromIndex <= n < endIndex
要头不要尾
二、ArrayList增删慢、查询快
1.增删慢:
1. 增加元素有可能出现调用grow方法,grow需要进行数组的扩容操作,操作过程中需要大
量的移动和拷贝过程,浪费时间
2. 在某一个指定位置添加元素,会导致从指定位置开始,之后的元素整体向后移动,涉及
移动复制操作,浪费时间。
3. 按照ArrayList可变长数组要求,删除元素之后,之后的内容都需要整体向前移动。
2.查询快:
Array底层保存的元素就是数组,通过下标方式访问,可以直接获取对应的元素内容,非常高效
3.特征
数组形式的操作方式,查询效率高,但是删除,增加效率低。
数组:
Object类型数组
三、LinkedList增删快、查询慢
1.增删快:
增删只要保存数据首地址不丢失,赋值完成,添加删除搞定,高效,不涉及数据的移动
2.查询慢:
查询需要从链表开始位置,一个个节点跳转查询。
3.特征
1. 存储数据,非连续空间。
2. 数据之间通过引用连接,方便遍历和使用
3. 遍历效率较低,数据非连续空间存储,需要通过引用跳转过程来完成
4. 删除插入操作效率高,但是注意地址的转移和保存问题。
5. LinkedList链表当中的操作其实大部分都是和C语言指针一个概念
- 按图索骥:SQL中数据倾斜问题的处理思路与方法
- [方法“Boolean Contains(System.Guid)”不支持转换为 SQL]的解决办法
- DataBind的一些试验
- 继承HibernateDaoSupport时遇到的问题 使用注解为HibernateDaoSupport注入sessionFa
- 常用代码
- 小程序的新功能你知道吗
- Mapxtreme之活活气死
- 仿淘宝的交易到计时JS
- 继小程序之后“小游戏”也来了,微信为此再次开启神秘入口
- (Head First 设计模式)学习笔记(3) --装饰者模式(StarBuzz咖啡店实例)
- 我的Js代码-按钮按下时判断是否选择了最后一行,给出提示
- (Head First 设计模式)学习笔记(2) --观察者模式(气象站实例)
- Spring Boot使用HandlerInterceptorAdapter和WebMvcConfigurerAdapter实现原始的登录验证
- 一条视频获C+融资 两个域名神助攻
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 听说Mysql你很豪横?-------------各种数据库介绍(为什么Mysql数据库能这么火热)
- Vuex的简单入门
- 听说Mysql你很豪横?-------------管理MySQL数据库基本操作命令
- Axios安装封装api接口
- 排障集锦:九九八十一难之第七难!mysql数据库登录密码忘记了
- Css实现上下无限跳动
- 排障集锦:九九八十一难之第八难!ERROR 2002 (HY000): Can‘t connect to local MySQL server
- Vue Router配置参数、404页面
- 机器学习之决策树三-CART原理与代码实现
- Vue Router路径切换过渡动画
- 听说Mysql你很豪横?-------------深入解析mysql数据库中的索引!
- 听说Mysql你很豪横?-------------深入解析mysql数据库中的事务!
- Struts2笔记
- Vue Router实现路由嵌套单页面展示
- 排障集锦:九九八十一难之第九难!mysql备份恢复路上的小插曲