15.集合框架(※重点※)List

集合框架(重点) 本文介绍了Java集合框架的核心概念和常用实现类,包括Collection、List、Set、Queue、Map五大接口。重点分析了ArrayList与LinkedList的区别、HashMap的实现原理(JDK1.8后改为数组+链表+红黑树结构)以及线程安全替代方案如ConcurrentHashMap。详细讲解了集合的常用操作方法,包括增删改查、遍历等,并比较了不同集合的特性:List有序可重复,Set无序不可重复,Queue遵循FIFO原则。此外还介绍了Collections工具类提供的排序、查找等实用 阅读详情

一.集合的特点:

1、长度是随意的 动态变化
2、集合可以存放任意引用类型的数据


二.集合的框架结构:(重点)

在这里插入图片描述

※集合与数组的对比:
相同点:

  • 都是数据的容器,在一个数组或集合中可以声明(存储)多个数据

不同点:

  • 元素:
    数组中的元素只能是相同(相兼容类型)
    集合中的元素是任意的(泛型)
    数组中可以存储基本类型和引用类型,集合只能存储引用类型
  • 长度(元素个数)
    数组是定长的,一旦初始化长度就不可以修改
    集合长度可以修改,可以删除元素和添加元素

三.collection中的常用方法

add(参数) 追加元素
add(参数1,参数2)插入元素
addAll(Collection<? >extends E c) 将指定 collection 中的所有元素都添加到此 collection 中
clear() 清空此 collection 中的所有元素
contains(Object o) 如果此 collection 包含指定的元素,则返回true
containsAll(Collection<?> c) 如果此 collection 包含指定 collection 中的所有元素,则返回 true
equals(Object o) 比较此 collection 与指定对象是否相等
isEmpty() 如果此 collection 不包含元素,则返回true
iterator() 返回在此 collection 的元素上进行迭代的迭代器
remove(Object o) 从此 collection 中移除指定元素的单个实例,如果存在的话
removeAll(Collection<?> c) 移除此 collection 中那些也包含在指定 collection 中的所有元素
retainAll(Collection<?> c) 仅保留此 collection 中那些也包含在指定 collection 的元素
size() 返回此 collection 中的元素数
toArray() 返回包含此 collection 中所有元素的数组
get()索引

[说明]:
1.可以利用迭代器遍历集合
2.当删除元素或插入元素后,删除或插入的元素之后的元素的索引会重新调整.不能通过索引跟踪元素

四.List接口

add(int index, E element) 在列表的指定位置插入指定元素
addAll(int index, Collection<?> extends E c) 将指定 collection 中的所有元素都插入到列表中的指定位置
containsAll(Collection<?> c) 如果列表包含指定 collection 的所有元素,则返回true
get(int index) 返回列表中指定位置的元素
indexOf(Object o) 返回此列表中第一次出现的指定元素的索引;如果此列表不包含该元素,则返回 -1
lastIndexOf(Object o) 返回此列表中最后出现的指定元素的索引;如果列表不包含此元素,则返回 -1
listIterator() 返回此列表元素的列表迭代器
remove(int index) 移除列表中指定位置的元素
set(int index, E element) 用指定元素替换列表中指定位置的元素
subList(int fromIndex, int toIndex) 返回列表中指定的 fromIndex(包括 )和 toIndex(不包括)之间的元素

1.List接口的存储特点:

有序,允许重复,可以通过下标访问集合元素
List接口中可以使用独有的迭代器ListIterator,具有反向遍历的功能

2.ArrayList类(有序,可重复,内存空间连续,允许null元素)

ArrayList类是List接口的大小可变数组的实现。实现了所有可选列表操作,并允许包括null在内的所有元素。

例子:

/**
 * @author CC
 * ArrayList可以存任何类型的数据
 */
public class ArrayListDemo {

	public static void main(String[] args) {
		//创建ArrayList集合
		ArrayList<Object> arr = new ArrayList<Object>();
		//集合长度(集合中元素的个数)
		System.out.println("集合长度:"+arr.size());
		//存放数据
		arr.add("胖虎");
		System.out.println("集合长度:"+arr.size());
		arr.add(1);
		System.out.println(arr.toString());
		//初始化时指定了长度
		ArrayList<Object> arrayList = new ArrayList<Object>(10);
		//集合的长度由其中元素的个数决定,和初始化的长度没关系
		System.out.println("集合长度:"+arrayList.size());//长度0
		arr.remove(1);//删除
		System.out.println(arr);
	}
}

public class ArrayListDemo2 {

	public static void main(String[] args) {
		ArrayList<Object> arrayList = new ArrayList<Object>();
		arrayList.add(1);
		arrayList.add(2);
		System.out.println("集合1:"+arrayList);
		
		ArrayList<Object> arrayList2 = new ArrayList<Object>();
		arrayList2.add(3);
		//把一个集合添加到另一个集合中
		arrayList2.addAll(arrayList);
		System.out.println("添加后的集合2:"+arrayList2);
		
		//删除一个集合中的另一个集合
		arrayList2.remove(arrayList);
		System.out.println(arrayList2);
		//add(参数1)追加
		arrayList2.add(2,"abc");
		System.out.println(arrayList2);
		System.out.println("----------------");
		
		//集合遍历
		for (int i = 0; i < arrayList2.size(); i++) {
			System.out.println(arrayList2.get(i));
		}
		System.out.println("----------------");
		//增强for
		for (Object object : arrayList2) {
			System.out.println(object.toString());
		}
		System.out.println("----------------");
		//迭代器遍历
		Iterator<Object> it = arrayList2.iterator();
		while(it.hasNext()) {
			System.out.println(it.next().toString());
		}
	}
}

在这里插入图片描述

3.LinkedList类(有序,可重复,内存空间不连续,允许null元素)

LinkedList类是List接口的链表实现。实现所有可选的列表操作,并且允许所有元素(包括null)。
在这里插入图片描述

public class LinkedListDemo {

	public static void main(String[] args) {
		LinkedList list = new LinkedList();
		list.add("aaaa");
		list.add("bbbb");
		list.add("cccc");
		System.out.println(list);
		//头部元素的方法
		list.addFirst("dddd");
		System.out.println(list);
		System.out.println("头部元素:"+list.getFirst());
		list.removeFirst();
		//尾部
		list.addLast("zzzz");
		System.out.println(list);
		System.out.println("尾部元素:"+list.getLast());
		list.removeLast();
		System.out.println(list);
	}
}

五.ArrayList和LinkedList的区别?

1、ArrayList和LinkedList可想从名字分析,它们一个是**Array(动态数组)的数据结构,一个是Link(链表)**的数据结构,此外,它们两个都是对List接口的实现。

前者是数组队列,相当于动态数组;后者为双向链表结构,也可当作堆栈、队列、双端队列

2、当随机访问List时(get和set操作),ArrayList比LinkedList的效率更高,因为LinkedList是线性的数据存储方式,所以需要移动指针从前往后依次查找。

3、当对数据进行增加和删除的操作时(add和remove操作),LinkedList比ArrayList的效率更高,因为ArrayList是数组,所以在其中进行增删操作时,会对操作点之后所有数据的下标索引造成影响,需要进行数据的移动。

4、从利用效率来看,ArrayList自由性较低,因为它需要手动的设置固定大小的容量,但是它的使用比较方便,只需要创建,然后添加数据,通过调用下标进行使用;而LinkedList自由性较高,能够动态的随数据量的变化而变化,但是它不便于使用。

5、ArrayList主要空间开销在于需要在List列表预留一定空间;而LinkList主要空间开销在于需要存储结点信息以及结点指针信息。
在这里插入图片描述

简单来说:

  • LinkedList集合适用在对元素插入和删除操作较频繁的时候
  • ArrayList集合适用在对元素查询操作较频繁的时候

六.分析

1). List接口下的集合分析:

  • 1、存入的数据都会转换为Object (降低效率)
  • 2、取出数据时容易发生异常

2)泛型:(泛型集合是对集合中存放数据的类型的约束,非约定的类型,不允许存入集合中)

  • 1、约定限制了集合中存放元素的类型
  • 2、不做类型转换,效率高,且安全
影像技术实战02:FFmpeg 镜头切分误检、漏检问题排查与基于场景变化的稳定分镜方案 本文介绍了基于FFmpeg的镜头切分技术在实际应用中的常见问题及解决方案。文章首先指出单纯使用select='gt(scene,0.4)'命令进行镜头检测存在误检、漏检等问题,包括黑场、字幕变化被误判为镜头切换,以及相似场景切换被漏检等情况。随后提出了一套四层架构的稳定解决方案:1)用FFmpeg提取候选镜头变化点;2)解析变化点时间和分数;3)通过后处理过滤异常点;4)按时间点切割视频片段并生成报告。文中详细展示了Python实现代码,包括场景点检测、时间间隔过滤等功能模块,为视频剪辑、影视解说等场景提供 阅读详情

相关推荐

SIPVicious实战指南:从零开始掌握VoIP渗透测试(Kali Linux环境)

本文为SIPVicious实战指南,详细介绍了在Kali Linux环境下进行VoIP渗透测试的完整流程。从环境准备与工具安装开始,逐步讲解如何使用svmap扫描SIP服务器、svwar枚举PBX分机号,以及svcrack进行密码安全测试,并整合svreport生成报告。旨在帮助安全从业者从零开始,系统掌握这套经典开源工具,在授权范围内有效评估VoIP系统的安全性。

weixin_29327977的博客 536

集合框架_集合的特点和数据结构、如何选择使用哪种集合呢、各种集合常见功能和遍历方式总结

1:集合 Collection(单例集合) List(有序,可重复) ArrayList 底层数据结构是数组,查询快,增删慢 线程不安全,效率高 Vector 底层数据结构是数组,查询快,增删慢 线程安全,效率低 LinkedList 底层数据结构是链表,查询慢,增删快 线程不安全,效率高 Set(无序,唯一) Ha...

qq_33182083的博客 365

集合框架(List)

list集合## 标题 集合框架 1、集合框架(简介、Collection方法、迭代器) 集合框架中提供了一个内部类专门操作集合中的元素,这个内部类就是迭代器 集合框架的由来:数据多了用对象进行存储,对象多了用集合来进行存储。 而存储数据的方式(数据结构)各有不同,所以存储的容器也就有多种,从而形成了集合框架这一体系。 Collection 层次结构 中的根接口。Collection 表示一组...

程 序 猿的博客 226

宿舍网速跑不满?可能是PPPoE的锅!实测OpenWrt切换DHCP+深澜认证,轻松跑满校园百兆宽带

本文探讨了校园网PPPoE协议的性能瓶颈问题,并提供了通过OpenWrt路由器切换DHCP+深澜认证的技术方案,实测可显著提升网速至百兆宽带满速。文章详细介绍了配置步骤、性能对比及常见问题解决方案,帮助用户优化校园网体验。

weixin_31310913的博客 383

基于simulink的BMS系统中电池单体故障隔离与恢复建模

本文介绍了使用Simulink构建BMS电池单体故障诊断与容错控制模型的方法。主要内容包括:1)搭建12串锂电池组模型;2)实现单体故障注入(过压、断线等);3)设计故障诊断与隔离模块(采用Stateflow状态机);4)开发恢复判断逻辑(需满足电压、温度等条件);5)系统监控与仿真设置。文章还提供了工程实践建议,如防环流设计、通信冗余等,并指出进阶方向(多故障处理、AI预警等)。该模型适用于新能源汽车、储能系统的BMS设计,可提高系统可靠性和安全性。

xiaoheshang_123的博客 140

集合框架(Set Map List)

Java集合框架体系Collection(List(ArrayList,Vector,LinkedList) Set(HashSet,LinkedHashSet,TreeSet)) Map(HashMap,LinkedHashMap,TreeMap,Hashtable,Properties)

Sakura_syh的博客 1205

桌面运维工程师面试题详解(一)

桌面运维工程师面试题详解(一)

jks212454的博客 1421

day15_集合

Collection父接口定义了一部分集合的共性操作,并不全List是Collection的子接口,有序允许重复的集合定义了一些方法,可以对位置进行精准控制即可以按照下标插入,删除,查询,修改集合元素List是接口,不能只能直接用,常用使其子实现类,ArrayList和LinkedListMap是一种映射关系的集合,能从键映射到值,他是一种特殊的集合,一次存储一对元素(键值对),即Map是双列集合。ps:映射理解为就是查找Map中键不能重复,去重。

a123hsbhbsbd的博客 1907

VIIRS-NPP夜间灯光遥感数据下载和预处理

右侧搜索框搜索“按掩膜提取”,提取出夜光影像中国区域。将其转换为Albers积投影和重采样到400m。点击右上角Export,选择shp格式。最后点export导出就行。点击复制按钮,来到这个。,ctrl + v粘贴。将小于0.3的值置为0。下载好月合成产品后,

热爱分享,热爱记录 1万+

Android Google 支付接入

1. 从 2023 年 8 月 2 日起,所有新应用都必须使用结算库版本 5 或更高版本。自 2023 年 11 月 1 日起,现有应用的所有新版本都必须使用结算库版本 5 或更高版本。 2. 如果您的应用以 Android 14 或更高版本为目标平台,您必须更新到 PBL 5.2.1 或 PBL 6.0.1 或更高版本。

帅次的博客 9404

Java集合框架:Set、List、Map及HashMap底层实现详解

Java集合框架主要分为三大类接口:​​List(列表)​​:有序集合,元素可重复实现类:ArrayList、LinkedList、Vector​​Set(集)​​:无序集合,元素不可重复实现类:HashSet、LinkedHashSet、TreeSet​​Map(映射)​​:键值对集合实现类:HashMap、LinkedHashMap、TreeMap、Hashtable集合类底层结构线程安全有序性允许nullArrayList动态数组否插入顺序是LinkedList。

aakhvb的博客 907

【AFAC2026金融智能-赛题四】我做了一个疯狂的决定,把Embedding和Reranker全删了

本文介绍了AFAC2026金融智能挑战赛赛道四的解题思路,核心是在500万token的严格限制下实现金融长文本的高效问答。作者通过四步流水线(规划、BM25检索、记忆压缩、LLM推理)优化流程,重点创新在于: 采用零API调用的纯BM25检索,配合多路查询、封面页加权和页面邻接扩展等策略 设计高效的检索算法,从问题中提取专有名词并构建多路查询组合 深入理解评分公式,平衡准确率和token消耗,最终在准确率提升的同时将token消耗从数百万降至百万级 这些创新使方案在严格限制下实现了性能突破,展示了在资源受限

224

【JAVA语言-第15话】集合框架(二)——List、ArrayList、LinkedList、Vector集合

ArrayList是一种动态数组,它实现了List接口。ArrayList可以根据需要自动调整大小,可以存储任意类型的对象。ArrayList提供了一系列的方法,可以方便地对其中的元素进行添加、删除、查找和遍历操作。与普通的数组相比,ArrayList的大小是可变的,并且可以自动处理底层数组的扩容和缩容。使用ArrayList能够方便地操作和管理一系列对象的集合。LinkedList实现了Java的List接口,因而可以像其他List实现类一样使用。它也实现了Deque接口,因而可以作为双端队列使用。

Zenghaiyue_1999的博客 1649

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

集合--List集合,增强for循环

什么是集合? 简称集,是用来存储多个元素的容器 集合和数组的区别 元素类型 集合:引用类型(存储基本类型时自动装箱) 数组:基本类型、引用类型 元素个数 集合:不固定,可任意扩容 数组:固定,不能改变容量 集合的好处 不受容器大小限制,可以随时添加、删除元素 提供了大量操作元素的方法(判断、获取等) Java的集合体系 单列集合(Collection) List: ArrayList Set: HashSet 双列集合(Map: key,value ) Map: HashMap 一、List集合

zijin_0722的博客 5412

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

「JavaDay15」集合框架

JavaDay15集合框架 本节学习到的内容有以下5类,不分先后顺序: 集合Collection体系结构 List子类 与集合结合使用的迭代器对象 集合与数组的区别? 常见的一般数据结构整理 1-集合的由来? Collection List ArrayList Vector LinkedList Set hashSet treeSet 在集合没有出现之前,使用对象数组来存储对象,但是,对象数组的长度一旦确定,则不可以发生变化,所以我们希望存在一个容器就像StringBuffer一样

她的妈妈爱上我的博客 319

小码笔记15:List、Set、Map集合

这里查看上一期的数据结构笔记 链接: link. 一、List集合 java.util.List接口 上层接口implements Collection接口 下层实现类 ArrayList 、Vector 、LinkedList 总结:有顺序的Collection 1.List接口特点 有序的集合 ,存储和取出元素的顺序是一致的 有索引,包含一了些带索引的方法 允许重复的元素(Set不包含重复元素) 2.常用方法(List特有) 带索引的方法(List特有) 1.void add(in

码为海的博客 655

集合框架 Collection - List(Arrays.asList)- 迭代器

集合框架 Collection - List(Arrays.asList)- 迭代器

pig_ning的博客 954

JAVA常用类库超重点——集合

集合知识点(Collection接口及其子类、Map接口及其子类)的个人学习记录

LJW123487的博客 1160

七、集合框架,Collection、list、set、map老师说集合学好了走到哪里都不怕

集合框架 文章目录集合框架1. 数组2.collection集合collection集合方法2.1add方法增加字符串增加数组2.2clear方法2.3size方法2.3addAll方法2.4containsAll/contains方法2.5isEpty方法2.6iterator方法(重点掌握)2.7 remove/removeAll方法2.8 retinAll方法2.9toArray方法3.List集合方法-----ArrayList的特有方法3.1 add()插入到指定位置3.2 addAll方法插入3

赵同学的博客 436

以八股的视角打开集合框架

通过八股文及个人面经的视角带你领略Java集合框架。这是一篇个人总结,更加侧重与集合和八股的结合。他的篇幅可能比较长,希望大家可以耐心观看哦

用笔锋去记录技术,去分享知识 2177

15_java的集合总结(重要并且重点掌握)

   前言    java的集合机制,本质上是一个数据容器,像之前学过的数组,字符串都是一种数据容器。但是集合它提供的功能更加强大,便捷。里面提供的方法的底层源代码采用的也是优秀的效率算法。其他数据容器能操作的,集合都能操作。而且代码更加简洁,思路更加清晰,运行的效率更加高。因此,完全掌握完集合。编程的技能会进一步提高。    已经对集合的神奇之处迷恋到无法自拔。学完集合,才发觉我以前的代码都是垃...

七夜的专栏 6593

Java集合之List集合(超详细)

java集合超详细简介(有例子)

My_story_begins的博客 1348

19--集合框架

Java集合框架的使用,例如Collection接口的公共方法、List接口的公共方法,ArrayList、LinkedList、Vector的使用以及三者之间的联系和区别。

憨憨浩浩的博客 498

JavaSE学习总结第15天_集合框架1

15.01 对象数组的概述和使用 1 public class Student 2 { 3 // 成员变量 4 private String name; 5 private int age; 6 7 // 构造方法 8 public Student() 9 { 10 supe...

diaoji9561的博客 281

浅析List、Set和Map集合扩容机制

用集合中添加数据来浅析扩容机制集合分类:浅析ListArrayListLinkedListSetHashSetTreeSet使用MapHashMap 集合分类: 1,集合: 集合又称为容器,用于存储、提取、删除数据。JDK提供的集合API都包含在 java.util 包内。 集合框架两大分支:Collection接口和Map接口 2,集合可以分为单值和双值 单值 list:arrayL...

YXX_decsdn的博客 2784

探索Java集合框架:List、ArrayList和LinkedList详解

在Java编程领域,集合框架是不可或缺的一部分,它为我们提供了灵活的数据存储和操作方式。本文将深入探讨集合框架中的List接口以及其两个主要实现类ArrayList和LinkedList。

W256936的博客 940
上一篇: 14.内部类
下一篇: 日历(判断是否是黑色星期五)
cuichen97
博客等级 码龄7年 34粉丝 209原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值