专栏首页后端JavaEEList<E>集合接口特征、ArrayList与LinkedList使用注意及特征

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语言指针一个概念

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 如何在idea中配置git环境,使终端可以输入git命令

  • Git---->Linux常用命令+主干、分支合并,发生冲突+当紧急任务来时,文件暂存+忽略文件不提交

    git config -l # 查看个人信息 git config --global user.name “xxx” # 设置个人姓名 全局设置 git c...

  • 如果try{}里面有一个return语句,那么紧跟着这个try后的finally{}里面的代码会不会执行?

    如果try{}里面有一个return语句,那么紧跟着这个try后的finally{}里面的代码会不会执行?

  • 《闲扯Redis九》Redis五种数据类型之Set型

    Redis 中的 Set 是我们经常使用到的一种数据类型,根据使用方式的不同,可以应用到很多场景中。

    大道七哥
  • Python中的集合

    Python中的集合专门用于存储信息,存储的元素无序且不能重复,它用一对花括号{}定义,数据之间用逗号隔开。

    阿黎逸阳
  • [ Java面试题 ]WEB篇

    Kevin_Zhang
  • 【两万字】面试官:听说你精通集合源码,接我二十个问题!

    这个图由Map指向Collection的Produces并不是说Map是Collection的一个子类(子接口),这里的意思是指Map的KeySet获取到的一个...

    山禾说
  • 限时免费|腾讯安全「网安夜校」开课啦!

    ? 疫情时期,网络安全从业者和信息安全专业学生要如何自我提升?腾讯安全推出的“网安夜校:提供了一条知识充电新途径。 在全民抗疫的关键时期,腾讯安全携手腾讯云大...

    鹅老师
  • 文本获取和搜索引擎中的反馈模型

    coursera课程 text retrieval and search engine 第五周 推荐。

    爬蜥
  • 4年前,他助推微软云平台落地中国;4年后,他成为微软加速器最年轻企业的创始人

    数据猿导读 在微软加速器北京第九期团队中,扩博智能Clobotics不仅是有史以来最年轻的团队,其创始人还曾供职微软16年,担任过微软大中华区副总裁;CTO曾经...

    数据猿

扫码关注云+社区

领取腾讯云代金券