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接口的单列集合实现类,底层是一个双向链表,同时实现了实现了ListDeque接口

     其特点包括

  1. 优点
  • 由于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_保函]

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/124103.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

MySQL数据库干货_09—— MySQL中的外键约束(Foreign Key)

外键约束(Foreign Key) 添加外键约束 使用DDL语句添加外键约束 ALTER TABLE 表名 ADD CONSTRAINT 约束名 FOREIGN KEY( 列 名 ) REFERENCES 参照的表名(参照的列名);示例一&#xff1a; 创建 departments 表包含 department_id 、department_name &#xff0c;location_id。…

dbeaver配置es连接org.elasticsearch.xpack.sql.jdbc.EsDriver

查看目标es服务版本&#xff0c;下载对应驱动

[UDS] --- CommunicationControl 0x28

1 0x28功能描述 根据ISO14119-1标准中所述&#xff0c;诊断服务28服务主要用于网络中的报文发送与接受&#xff0c;比如控制应用报文的发送与接收&#xff0c;又或是控制网络管理报文的发送与接收&#xff0c;以便满足一定场景下的应用需求。 2 0x28应用场景 一般而言&#…

k8s节点已有镜像,但Pod一直在拉取镜像时卡着

Pod状态为ContainerCreating&#xff0c;查看日志提示pull镜像&#xff0c;但该镜像在Node节点已经存在&#xff0c;且拉取策略为IfNotPresent 解决&#xff1a;重启kubelet

迁移学习 - 微调

什么是与训练和微调&#xff1f; 你需要搭建一个网络模型来完成一个特定的图像分类的任务。首先&#xff0c;你需要随机初始化参数&#xff0c;然后开始训练网络&#xff0c;不断调整参数&#xff0c;直到网络的损失越来越小。在训练的过程中&#xff0c;一开始初始化的参数会…

指针相关面试题目

数组名的意义&#xff1a; 1. sizeof( 数组名 ) &#xff0c;这里的数组名表示整个数组&#xff0c;计算的是整个数组的大小。 2. & 数组名&#xff0c;这里的数组名表示整个数组&#xff0c;取出的是整个数组的地址。 3. 除此之外所有的数组名都表示首元素的地址。 下…

【地理位置识别】IP归属地应用的特点

IP归属地应用是一类用于确定特定IP地址的地理位置信息&#xff08;通常是城市、地区或国家&#xff09;的工具和服务。以下是IP归属地应用的几个主要特点&#xff1a; 地理位置识别&#xff1a; IP归属地应用主要用于确定IP地址的地理位置。这可以帮助组织更好地了解其网站访问…

【C语言实现扫雷小游戏——可展开一片】

文章目录 1. 游戏分析和设计1.1扫雷游戏的功能说明1.2数据结构的分析与设计 2.代码实现2.1基本框架2.2初始化棋盘2.3打印棋盘2.4布置雷2.4统计周围雷的个数2.5排查雷2.6展开一片 3.完成代码3.1game.h3.2 game.c3.3test.c 学习完了函数和数组&#xff0c;让我们做个扫雷小游戏巩…

评估在线不平衡学习的PAUC

评估在线不平衡学习的PAUC 原始论文《Prequential AUC: properties of the area under the ROC curve for data streams with concept drift》 由于正常的AUC需要计算整体数据集上&#xff0c;每个数据的预测置信度的排名。那么我们首先要求我们的在线学习算法在进行预测时也返…

Flume 快速入门【概述、安装、拦截器】

文章目录 什么是 Flume&#xff1f;Flume 组成Flume 安装Flume 配置任务文件应用示例启动 Flume 采集任务 Flume 拦截器编写 Flume 拦截器拦截器应用 什么是 Flume&#xff1f; Flume 是一个开源的数据采集工具&#xff0c;最初由 Apache 软件基金会开发和维护。它的主要目的是…

Java 谈谈你对OOM的认识

文章目录 前言一、基础架构二、常见OOM1、栈内存溢出java.lang.StackOverflowError2、堆内存溢出java.lang.OutOfMemoryError&#xff1a;Java heap space3、GC回收时间过长java.lang.OutOfMemoryError: GC overhead limit exceeded4、NIO程序堆外内存溢出java.lang.OutOfMemor…

H 指数 II

给你一个整数数组 citations &#xff0c;其中 citations[i] 表示研究者的第 i 篇论文被引用的次数&#xff0c;citations 已经按照 升序排列 。计算并返回该研究者的 h 指数。 h 指数的定义&#xff1a;h 代表“高引用次数”&#xff08;high citations&#xff09;&#xff…

STM32———USART串口控制LED灯亮灭

1.硬件设计流程 2.程序设计流程 1.串口初始化时钟使能&#xff1a;RCC_APBxPeriphClockCmd(); GPIO初始化时钟使能&#xff1a;RCC_AHBxPeriphClockCmd();2.GPIO端口模式配置&#xff1a;GPIO_Init();3.串口参数初始化&#xff1a;USART_Init();4.串口使能&#xff1a;USART_C…

SpringBoot相比于Spring的优点(自动配置和依赖管理)

自动配置 例子见真章 我们先看一下我们Spring整合Druid的过程&#xff0c;以及我们使用SpringBoot整合Druid的过程我们就知道我们SpringBoot的好处了。 Spring方式 Spring方式分为两种&#xff0c;第一种就是我们使用xml进行整合&#xff0c;第二种就是使用我们注解进行简化…

RedissonCach的源码流程

上&#xff1a; https://blog.csdn.net/Michelle_Zhong/article/details/126384566 中&#xff1a; https://blog.csdn.net/michelle_zhong/category_11874153.html 下&#xff1a; https://blog.csdn.net/Michelle_Zhong/article/details/126391915?ops_request_misc%257B%…

AAOS CarMediaService 问题分析

文章目录 问题描述车载蓝牙音乐流程Music 监听焦点变化流程BT请求焦点的流程MediaSession 服务端的流程BT和music 之间的相互影响 问题描述 问题 AAOS界面连接蓝牙的情况下&#xff0c;Music应用播放音乐会暂停。 分析 暂停是应用的行为&#xff0c;Music应用会监听focus的变化…

GE IS420UCSBH1A 控制器模块

控制器模块是工业自动化和控制系统中的关键组件&#xff0c;用于监测、控制和管理各种工程过程。这些模块通常具有以下特点&#xff1a; 多通道控制&#xff1a; 控制器模块通常可以控制多个通道&#xff0c;允许同时管理多个设备或过程。 实时控制&#xff1a; 模块支持实时控…

docker 启动简单的开发环境(mysql, redis, etcd)

docker开启容器分为两种&#xff0c;一种是命令启动&#xff0c;一种是用yaml启动 本片文章用到的是yaml启动 以下是启动脚本&#xff1a;env.yaml version: "3" services:jump_etcd:container_name: jump_etcdimage: bitnami/etcd:3privileged: truevolumes:- &q…

判读文本编码是否为UTF8

&#xff08;----转载-----&#xff0c;忘记出处了抱歉&#xff09; private bool IsUtf8(byte[] buff) { for (int i 0; i < buff.Length; i) { if ((buff[i] & 0xE0) 0xC0) // 110x xxxx 10xx xxxx …

使用NVIDIA GPU FFmpeg转码 YUV to H264(成功)

0. 官方教程 NVIDIA官方教程&#xff1a;链接&#xff0c;本篇内容主要参考2.2 Software Setup。 1. 安装显卡驱动 确保nvidia-smi能够正常使用&#xff1a; 2. 安装CUDA toolkit 注意要与显卡驱动版本对应&#xff0c;验证toolkit是否正确安装&#xff1a; 3. 安装ffnvco…