java集合之List接口实现类常用方法详解
目录
一、List集合概述
二、ArrayList类
三、ArrayList常用方法实例
四、LinkedList类
五、Linkedist常用方法实例
一、List集合概述
java.util.List接口继承自Collection接口,是单列集合的一个分支,通常将实现了List接口的对象称为List集合,在List集合中允许出现重复的元素,所有的元素是以一种线性方式进行存储的,在程序中可以通过元素的索引下标来访问集合中的指定元素,另外List集合还有一个特点就是元素有序,即元素的存入顺序和取出顺序一致
List接口常用方法列表说明详见 java集合之Collection接口体系-CSDN博客
二、ArrayList类
java.util.ArrayList是一个实现了List接口的单列集合实现类,底层是一个大小可变的数组的实现
java.util.ArrayList集合数据存储的结构本质是一个可变数组对象,其特点包括:
1.查找快:日常开发中使用最多的功能为查询数据、遍历数据,所以ArrayList是常用的集合。
2.元素增删操作慢,一旦在某个位置增加、修改和删除数据,后面所有数据都必须往后移动
三、ArrayList常用方法实例
1.向集合中添加单个元素
/*** 在集合中添加单个元素* @return 返回集合列表*/private List<String> add(){List<String> list = new ArrayList<String>();list.add("01_贷款");list.add("02_贴现");list.add("03_承兑");list.add("04_保函");list.add("05_信用证");return list;}
2.在集合的指定索引下标处添加单个元素
/*** 在集合的指定下标处添加单个元素* @param list 集合对象* @param index 索引位置* @param obj 需要添加的元素对象* @return 变更后的集合对象*/private List<String> addForIndex(int index,List<String> list,String obj){list.add(index,obj);return list;}
3.在集合的尾部添加子集合
/*** 在集合的尾部添加子集合* @param list 集合对象* @return 返回合并后的集合对象*/private List<String> addSubListDemo(List<String> list){//定义一个子集合列表List<String> subList = new ArrayList<>();subList.add("06_委托贷款");subList.add("07_垫款");subList.add("08_贷款承诺");subList.add("09_担保");//将定义的子集合添加到已知集合的末尾list.addAll(subList);return list;}
4.在集合的指定索引下标位置添加子集合
/*** 在集合的指定索引位置添加子集合列表* @param list 集合对象* @param index 索引位置* @return 返回合并后的集合对象*/private List<String> addSubListForIndexDemo(List<String> list,int index){//定义一个子集合列表List<String> subList = new ArrayList<>();subList.add("06_委托贷款");subList.add("07_垫款");subList.add("08_贷款承诺");subList.add("09_担保");//将定义的子集合添加到已知集合的指定索引位置list.addAll(index,subList);return subList;}
5.获取集合的元素数量
/*** 获取集合元素的数量大小* @param list 集合对象* @return 返回集合中元素的数量*/private Integer getListSize(List<String> list){return list.size();}
6.获取集合中指定元素对象的索引下标
/*** 获取集合中指定元素对象的索引位置* @param list 集合对象* @param obj 元素对象* @return 返回元素的索引位置*/private Integer getIndexForElement(List<String> list,String obj){return list.indexOf(obj);}
7.获取集合中指定元素最后一次的索引位置
/*** 获取集合中指定元素最后一次的索引位置* @param list 集合对象* @param obj 元素对象* @return 返回最后一次出现的索引位置*/private Integer getIndexForLastElement(List<String> list,String obj){return list.lastIndexOf(obj);}
8.将指定元素对象从集合中移除
/*** 将指定元素对象从集合中移除* @param list 集合对象* @param obj 需要移除的元素* @return 是否移除成功*/private boolean removeListElement(List<String> list,String obj){return list.remove(obj);}
9.将集合中指定索引下标位置的元素替换为新的元素对象
/*** 将集合中指定索引位置的元素替换为新的元素对象* @param list 集合对象* @param index 指定的索引位置* @param obj 替换的新元素* @return 返回被替换的元素*/private String getSetElementForIndex(List<String> list,Integer index,String obj){return list.set(index,obj);}
10.将集合中的元素根据指定索引范围截取一个新的集合返回
/*** 从已知集合中根据指定索引范围截取一个新的集合返回* @param list 集合对象* @param startIndex 起始索引* @param endIndex 结束索引* @return 返回获取的子集合*/private List<String> getSetElementForIndex(List<String> list,Integer startIndex,Integer endIndex){return list.subList(startIndex, endIndex);}
11.集合中的元素转换为一个对象数组返回
/*** 从已知集合中转换为一个对象数组返回* @param list 集合对象* @return 返回集合的数组对象*/private Object[] getToArrayForList(List<String> list){return list.toArray();}
四、LinkedList类
java.util.LinkedList是一个实现了List接口的单列集合实现类,底层是一个双向链表,同时实现了实现了List
和Deque
接口
其特点包括
- 优点
- 由于LinkedList底层实现是双向链表,所以在进行插入和删除操作方面具有高效性。
- 由于LinkedList是动态的数据结构,因此在使用时不需要预先分配空间
- 由于LinkedList实现了Deque接口 在集合的队首和队尾可以进行高效的插入和删除操作
2. 缺点:
- 由于LinkedList底层实现是双链表,所以从集合中访问某个元素时需要从头开始遍历整个链表,所以其查询操作慢
- 由于LinkedList在进行元素对象存储时,需要将指向下一个元素和上一个元素的指针同时进行存储,其占用的内存空间相比ArrayList数组要更多。
- 由于LinkedList是基于链表实现的,因此不支持随机访问,只能通过遍历整个链表来访问元素
五、Linkedist常用方法实例
1.将指定元素添加到集合的头部,方法包括2个
- addFirst、offerFirst:将元素添加到集合的头部,并返回true
import java.util.LinkedList;public class LinkedListDemo {public static void main(String[] args) {LinkedList linkedList = new LinkedList<String>();LinkedListDemo listDemo = new LinkedListDemo();linkedList = listDemo.addLinkedList();System.out.println("初始集合元素包括:"+linkedList);linkedList.addFirst("05_信用证");linkedList.offerFirst("06_电票");System.out.println("头部添加后的集合元素包括:"+linkedList);}private LinkedList addLinkedList(){LinkedList linkedList = new LinkedList<String>();linkedList.add("01_贷款");linkedList.add("02_贴现");linkedList.add("03_承兑");linkedList.add("04_保函");return linkedList;}
}
执行结果:初始集合元素包括:[01_贷款, 02_贴现, 03_承兑, 04_保函]头部添加后的集合元素包括:[06_电票, 05_信用证, 01_贷款, 02_贴现, 03_承兑, 04_保函]
2.将指定的元素添加到集合的尾部,方法包括4个
- add(E e)、offer(E e)、offerLast(E e):将元素添加到集合的尾部,并返回true
- addLast(E e):将元素添加到集合的尾部,无返回值
import java.util.LinkedList;
public class LinkedListDemo {public static void main(String[] args) {LinkedList linkedList = new LinkedList<String>();LinkedListDemo listDemo = new LinkedListDemo();listDemo.addElement(linkedList,"01_贷款");listDemo.addElementForOffer(linkedList,"02_贴现");listDemo.addElementForOfferLast(linkedList,"03_承兑");listDemo.addElementForAddLast(linkedList,"04_保函");System.out.println("集合元素包括:"+linkedList);}private boolean addElement(LinkedList<Object> linkedList,Object obj){return linkedList.add(obj);}private boolean addElementForOffer(LinkedList<Object> linkedList,Object obj){return linkedList.add(obj);}private boolean addElementForOfferLast(LinkedList<Object> linkedList,Object obj){return linkedList.offerLast(obj);}private void addElementForAddLast(LinkedList<Object> linkedList,Object obj){linkedList.addLast(obj);}
}
执行结果:集合元素包括:[01_贷款, 02_贴现, 03_承兑, 04_保函]
3.获取集合的头元素方法包括4个
- element()、getFirst():获取集合列表的头元素对象,若集合列表中无元素对象时抛出异常
- peek()、peekFirst():获取集合列表的头元素对象,若集合列表中无元素对象时返回null
//若不做空判断将会抛NoSuchElementExceptionprivate String getElementForElement(LinkedList<String> linkedList){String element = linkedList==null||linkedList.size()==0?"":linkedList.element();return element;}//若不做空判断将会抛NoSuchElementExceptionprivate String getElementForFirst(LinkedList<String> linkedList){String element = linkedList==null||linkedList.size()==0?"":linkedList.getFirst();return element;}//若不做空判断将返回nullprivate String getElementForPeek(LinkedList<String> linkedList){String element = linkedList.peek();return element;}//若不做空判断将返回nullprivate String getElementForPeekFirst(LinkedList<String> linkedList){String element = linkedList.peekFirst();return element;}
4.检索集合中的元素可分为两类即
- 检索但不删除元素,包括三个方法,即get(int index)、getFirst()、getLast(),使用该类方法获取集合中的元素,若集合不存在元素对象时,将抛出被请求的元素不存在异常,其中get(int Index)抛出数组越界异常,getFirst()和getLast()抛出空指针异常,所以在使用该类方法时需要注意空指针判断
public class LinkedListDemo {public static void main(String[] args) {LinkedListDemo listDemo = new LinkedListDemo();LinkedList linkedList = listDemo.addLinkedList();System.out.println("集合元素列表:"+linkedList +"\n根据索引获取指定元素:"+listDemo.getElementForGet(linkedList,2) +"\n获取集合头元素:"+listDemo.getElementForFirst(linkedList)+"\n获取集合尾元素:"+listDemo.getElementForLast(linkedList) ); }private LinkedList addLinkedList(){LinkedList linkedList = new LinkedList<String>();linkedList.add("01_贷款");linkedList.add("02_贴现");linkedList.add("03_承兑");linkedList.add("04_保函");return linkedList;}public String getElementForGet(LinkedList<String> linkedList,Integer index){return linkedList!=null&&linkedList.size()>0?linkedList.get(index):"";}public String getElementForFirst(LinkedList<String> linkedList){return linkedList!=null&&linkedList.size()>0?linkedList.getFirst():"";}public String getElementForLast(LinkedList<String> linkedList){return linkedList!=null&&linkedList.size()>0?linkedList.getLast():"";}
}
执行结果:集合元素列表:[01_贷款, 02_贴现, 03_承兑, 04_保函]根据索引获取指定元素:03_承兑获取集合头元素:01_贷款获取集合尾元素:04_保函
- 检索的同时将检索的元素从集合中删除,包括六个方法 即poll()、pollFirst()、pollLast()、remove(int index)、removeFirst()、removeLast()、remove(Object obj)
其中poll*() : 使用该类方法删除集合中的元素同时返回被删除的元素对象,若集合不存在元素对象时,则返回null,不会抛出异常
public class LinkedListDemo {public static void main(String[] args) {LinkedListDemo listDemo = new LinkedListDemo();LinkedList linkedList = listDemo.addLinkedList();System.out.println("原始集合元素列表:"+linkedList +"\nPoll方法获取集合头元素:"+listDemo.getElementForPoll(linkedList) +"\nPollFirst获取集合头元素:"+listDemo.getElementForPollFirst(linkedList)+"\nPollLast获取集合尾元素:"+listDemo.getElementForPollLast(linkedList) +"" +"\n检索集合元素后集合中的元素列表:"+ linkedList);}private LinkedList addLinkedList(){LinkedList linkedList = new LinkedList<String>();linkedList.add("01_贷款");linkedList.add("02_贴现");linkedList.add("03_承兑");linkedList.add("04_保函");linkedList.add("05_电票");return linkedList;}public String getElementForPoll(LinkedList<String> linkedList){return linkedList.poll();}public String getElementForPollFirst(LinkedList<String> linkedList){return linkedList.pollFirst();}public String getElementForPollLast(LinkedList<String> linkedList){return linkedList.pollLast();}
}
执行结果:原始集合元素列表:[01_贷款, 02_贴现, 03_承兑, 04_保函, 05_电票]Poll方法获取集合头元素:01_贷款PollFirst获取集合头元素:02_贴现PollLast获取集合尾元素:05_电票检索集合元素后集合中的元素列表:[03_承兑, 04_保函]
其中remove*() : 使用该类方法删除集合中的元素同时返回被删除的元素对象(其中remove(Object obj)方法返回是否删除成功的boolean值,成功返回true,否则返回false),若集合为空时则抛出空指针异常,若集合不存在元素对象时, 抛出被请求的元素不存在异常
public class LinkedListDemo {public static void main(String[] args) {LinkedListDemo listDemo = new LinkedListDemo();LinkedList linkedList = listDemo.addLinkedList();System.out.println("原始集合元素列表:"+linkedList +"\nremove方法删除集合头元素:"+listDemo.removeElementForRemove(linkedList,2) +"\nremove方法删除集合指定元素:"+listDemo.removeElementForRemoveObj(linkedList,"05_电票") +"\nremoveFirst方法删除集合头元素:"+listDemo.removeElementForRemoveFirst(linkedList) +"\nremoveLast方法删除集合尾元素:"+listDemo.removeElementForRemoveLast(linkedList) +"\n删除集合元素后集合中的元素列表:"+ linkedList); }private LinkedList addLinkedList(){LinkedList linkedList = new LinkedList<String>();linkedList.add("01_贷款");linkedList.add("02_贴现");linkedList.add("03_承兑");linkedList.add("04_保函");linkedList.add("05_电票");linkedList.add("06_垫款");return linkedList;}public String removeElementForRemove(LinkedList<String> linkedList,int index){return linkedList!=null&&linkedList.size()>0? linkedList.remove(index):"";}public boolean removeElementForRemoveObj(LinkedList<String> linkedList,Object obj){return linkedList!=null&&linkedList.size()>0?linkedList.remove(obj):false;}public String removeElementForRemoveFirst(LinkedList<String> linkedList){return linkedList!=null&&linkedList.size()>0?linkedList.removeFirst():"";}public String removeElementForRemoveLast(LinkedList<String> linkedList){return linkedList!=null&&linkedList.size()>0?linkedList.removeLast():"";}}
执行结果:原始集合元素列表:[01_贷款, 02_贴现, 03_承兑, 04_保函, 05_电票, 06_垫款]remove方法删除集合头元素:03_承兑remove方法删除集合指定元素:trueremoveFirst方法删除集合头元素:01_贷款removeLast方法删除集合尾元素:06_垫款删除集合元素后集合中的元素列表:[02_贴现, 04_保函]
相关文章:
java集合之List接口实现类常用方法详解
目录 一、List集合概述 二、ArrayList类 三、ArrayList常用方法实例 四、LinkedList类 五、Linkedist常用方法实例 一、List集合概述 java.util.List接口继承自Collection接口,是单列集合的一个分支,通常将实现了List接口的对象称为List集合&#x…...

三分钟带你了解JS、原型、原型链
1.什么是JS? JavaScript是一种基于对象的脚本语言,它不仅可以创建对象,也能使用现有的对象; 它是基于原型编程、多范式的动态脚本语言,并且支持面向对象、命令式、声明式、函数式编程范式; 白话一点说就是…...

C# 基于腾讯云人脸核身和百度云证件识别技术相结合的 API 实现
目录 腾讯云人脸核身技术 Craneoffice.net 采用的识别方式 1、活体人脸核身(权威库): 2、活体人脸比对: 3、照片人脸核身(权威库): 调用成本 百度云身份证识别 调用成本 相关结合点 核心代码 实现调用人脸核身API的示例 实现调用身…...
LeetCode每日一题——275. H-Index II
文章目录 一、题目二、题解 一、题目 Given an array of integers citations where citations[i] is the number of citations a researcher received for their ith paper and citations is sorted in ascending order, return the researcher’s h-index. According to the…...
项目添加EZOpenSDK之后就开始报错:could not build module foundation等
最近修改一个老项目,出现了一个报错问题。困扰了很久。现在终于找到解决方法了。分享一下。 正常的项目,使用pod引入EZOpenSDK之后就开始报错了,下面就是错误信息: could not build module foundation错误 could not build modul…...

“智能科技·链接未来”2024中国国际人工智能产品展览会·智博会
2024年中国国际人工智能产品展览会(简称世亚智博会)将于3月份在上海举办,6月份在北京举办。本届展会以“智能科技链接未来”为主题,将集中展示全球前沿的人工智能技术和应用,以及人工智能在各个领域的新成果。 本届展会…...

华为NAT配置实例(含dhcp、ospf配置)
一、网络拓朴如下: 二、要求:PC1 能访问到Server1 三、思路: R2配置DHCP,R2和R1配OSPF,R1出NAT 四、主要配置: R2的DHCP和OSPF: ip pool 1gateway-list 10.1.1.1 network 10.1.1.0 mask 25…...

怎样才能把视频号的视频保存到相册,怎么下载视频号视频两个方法轻松解决
在微信客户端想要下载视频号视频却不知道怎么保存到本地相册?让不少网友犯了难,不用在纠结怎么样才可以将视频号视频下载下来,今天就分享两个小程序将视频号视频提取出来,另外在告诉大家一个下载技巧,一定要看到到结尾…...

软考系统架构师知识点集锦七:计算机系统基础知识
一、考情分析 二、考点精讲 2.1计算机系统概述 2.1.1计算机系统组成 2.1.2 存储系统 时间局部性:指程序中的某条指令一旦执行,不久以后该指令可能再次执行,典型原因是由于程序中存在着大量的循环操作。 空间局部性:指一旦程序访问了某个存储单元,不久…...
k8s节点已有镜像,但Pod一直在拉取镜像时卡着
Pod状态为ContainerCreating,查看日志提示pull镜像,但该镜像在Node节点已经存在,且拉取策略为IfNotPresent 解决:重启kubelet...

用图说话——流程图进阶
目录 一、基本流程图 二、时序流程图 一、基本流程图 经常阅读歪果仁绘制的流程图,感觉比较规范,自己在工作中也尝试用他们思维来绘图,这是一个小栗子: 二、时序流程图 在进行Detail设计过程中,一般的绘图软件显得…...

深入了解 Elasticsearch 8.1 中的 Script 使用
一、什么是 Elasticsearch Script? Elasticsearch 中的 Script 是一种灵活的方式,允许用户在查询、聚合和更新文档时执行自定义的脚本。这些脚本可以用来动态计算字段值、修改查询行为、执行复杂的条件逻辑等等。 二、支持的脚本语言有哪些 支持多种脚本…...

激光雷达点云基础-点云滤波算法与NDT匹配算法
激光雷达点云处理在五年前就做了较多的工作,最近有一些新的接触发现激光雷达代码原理五年前未见重大更新,或许C与激光雷达结合本身就是比较高的技术门槛。深度学习调包侠在硬核激光雷达技术面前可以说是完全的自愧不如啊。 1、点云滤波 在获取点云数据…...

回收废品抢派单小程序开源版开发
回收废品派单抢派单小程序开源版开发 在这个废品回收抢单派单小程序开源版开发中,我们将构建一个专业且富有趣味性的平台,以深度的模式来重塑废品回收体验。 我们将提供一个会员注册功能,用户可以通过小程序授权注册和手机号注册两种方式快…...

粤嵌实训医疗项目--day04(Vue + SpringBoot)
往期回顾 粤嵌实训医疗项目--day03(Vue SpringBoot)-CSDN博客粤嵌实训医疗项目day02(Vue SpringBoot)-CSDN博客粤嵌实训医疗项目--day01(VueSpringBoot)-CSDN博客 目录 一、用户详细信息查询 (查询信息与…...

redis加入window服务及删除
1、命令redis-server.exe --service-install redis.windows.conf,在服务中可配置自动启动 删除redis服务,先停止redis服务运行,管理员cmd模式,sc delete "redis" ,...

leetcode-哈希表
1. 理论 从哈希表的概念、哈希碰撞、哈希表的三种实现方式进行学习 哈希表:用来快速判断一个元素是否出现集合里。也就是查值就能快速判断,O(1)复杂度; 哈希碰撞:拉链法,线性探测法等。只是一种…...
NOIP2023模拟6联测27 旅行
题目大意 有一个有 n n n个点 n n n条边的无向连通图,一开始每条边都有一个颜色 c c c。 有 m m m次操作,每次操作将一条两个端点为 x , y x,y x,y的边的颜色修改为 c c c。求每次修改之后,图中有多少个颜色相同的连通块。 一个颜色相同的…...

【表面缺陷检测】钢轨表面缺陷检测数据集介绍(2类,含xml标签文件)
一、介绍 钢轨表面缺陷检测是指通过使用各种技术手段和设备,对钢轨表面进行检查和测量,以确定是否存在裂纹、掉块、剥离、锈蚀等缺陷的过程。这些缺陷可能会对铁路运输的安全和稳定性产生影响,因此及时进行检测和修复非常重要。钢轨表面缺陷…...

SHCTF 2023 新生赛 Web 题解
Web [WEEK1]babyRCE 源码过滤了cat 空格 我们使用${IFS}替换空格 和转义获得flag [WEEK1]飞机大战 源码js发现unicode编码 \u005a\u006d\u0078\u0068\u005a\u0033\u0074\u006a\u0059\u006a\u0045\u007a\u004d\u007a\u0067\u0030\u005a\u0069\u0030\u0031\u0059\u006d\u0045…...

(二)TensorRT-LLM | 模型导出(v0.20.0rc3)
0. 概述 上一节 对安装和使用有个基本介绍。根据这个 issue 的描述,后续 TensorRT-LLM 团队可能更专注于更新和维护 pytorch backend。但 tensorrt backend 作为先前一直开发的工作,其中包含了大量可以学习的地方。本文主要看看它导出模型的部分&#x…...

转转集团旗下首家二手多品类循环仓店“超级转转”开业
6月9日,国内领先的循环经济企业转转集团旗下首家二手多品类循环仓店“超级转转”正式开业。 转转集团创始人兼CEO黄炜、转转循环时尚发起人朱珠、转转集团COO兼红布林CEO胡伟琨、王府井集团副总裁祝捷等出席了开业剪彩仪式。 据「TMT星球」了解,“超级…...

【快手拥抱开源】通过快手团队开源的 KwaiCoder-AutoThink-preview 解锁大语言模型的潜力
引言: 在人工智能快速发展的浪潮中,快手Kwaipilot团队推出的 KwaiCoder-AutoThink-preview 具有里程碑意义——这是首个公开的AutoThink大语言模型(LLM)。该模型代表着该领域的重大突破,通过独特方式融合思考与非思考…...
C++中string流知识详解和示例
一、概览与类体系 C 提供三种基于内存字符串的流,定义在 <sstream> 中: std::istringstream:输入流,从已有字符串中读取并解析。std::ostringstream:输出流,向内部缓冲区写入内容,最终取…...
【服务器压力测试】本地PC电脑作为服务器运行时出现卡顿和资源紧张(Windows/Linux)
要让本地PC电脑作为服务器运行时出现卡顿和资源紧张的情况,可以通过以下几种方式模拟或触发: 1. 增加CPU负载 运行大量计算密集型任务,例如: 使用多线程循环执行复杂计算(如数学运算、加密解密等)。运行图…...
Java入门学习详细版(一)
大家好,Java 学习是一个系统学习的过程,核心原则就是“理论 实践 坚持”,并且需循序渐进,不可过于着急,本篇文章推出的这份详细入门学习资料将带大家从零基础开始,逐步掌握 Java 的核心概念和编程技能。 …...

OPENCV形态学基础之二腐蚀
一.腐蚀的原理 (图1) 数学表达式:dst(x,y) erode(src(x,y)) min(x,y)src(xx,yy) 腐蚀也是图像形态学的基本功能之一,腐蚀跟膨胀属于反向操作,膨胀是把图像图像变大,而腐蚀就是把图像变小。腐蚀后的图像变小变暗淡。 腐蚀…...

C# 求圆面积的程序(Program to find area of a circle)
给定半径r,求圆的面积。圆的面积应精确到小数点后5位。 例子: 输入:r 5 输出:78.53982 解释:由于面积 PI * r * r 3.14159265358979323846 * 5 * 5 78.53982,因为我们只保留小数点后 5 位数字。 输…...

vulnyx Blogger writeup
信息收集 arp-scan nmap 获取userFlag 上web看看 一个默认的页面,gobuster扫一下目录 可以看到扫出的目录中得到了一个有价值的目录/wordpress,说明目标所使用的cms是wordpress,访问http://192.168.43.213/wordpress/然后查看源码能看到 这…...

c++第七天 继承与派生2
这一篇文章主要内容是 派生类构造函数与析构函数 在派生类中重写基类成员 以及多继承 第一部分:派生类构造函数与析构函数 当创建一个派生类对象时,基类成员是如何初始化的? 1.当派生类对象创建的时候,基类成员的初始化顺序 …...