List集合知识总结

news2024/11/17 1:35:11

文章目录

  • List
    • ArrayList
        • 常用方法
        • 遍历方法
            • for循环
            • for-each循环
            • 迭代器
            • forEach + Lambda表达式
        • List转化为Array
            • 循环遍历集合
            • 调用toArray无参方法。
            • 调用toArray(T[] a)有参方法
    • LinkedList
        • 同ArrayList的区别
        • 常用方法

List

List是一种常用的集合类型,它可以存储任意类型的对象,也可以结合泛型来存储具体的类型对象,本质上就是一个容器。

List中主要有ArrayList、LinkedList两个实现类

ArrayList

ArrayList 类是一个可以动态修改的数组,与普通数组的区别就是它是没有固定大小的限制,我们可以添加或删除元素。

常用方法

ArrayList和LinkedList通用

方法名说明
public boolean add(要添加的元素)将指定的元素追加到此集合的末尾
public boolean remove(要删除的元素)删除指定元素,返回值表示是否删除成功
public E remove(int index)删除指定索引处的元素,返回被删除的元素
public E set(int index,E element)修改指定索引处的元素,返回被修改的元素
public E get(int index)返回指定索引处的元素
public int size()返回集合中的元素的个数
boolean contains(Object o)如果此列表包含指定的元素,则返回 true
boolean addAll(int index, Collection<? extends E> c)将指定集合中的所有元素插入到此列表中,从指定的位置开始
void clear()列表中删除所有元素
public static void main(String[] args) {
		// TODO Auto-generated method stub
		// 创建集合
		List list = new ArrayList<>();

		// 添加元素
		list.add("hello");
		list.add("world");
		list.add("java");

		// public boolean remove(Object o):删除指定的元素,返回删除是否成功
		 System.out.println(list.remove("world"));//true
		 System.out.println(list.remove("javaee"));//false

		// public E remove(int index):删除指定索引处的元素,返回被删除的元素
		 System.out.println(list.remove(1));//world

		// IndexOutOfBoundsException
		 System.out.println(list.remove(3));

		// public E set(int index,E element):修改指定索引处的元素,返回被修改的元素
		 System.out.println(list.set(1,"javaee"));//world

		// IndexOutOfBoundsException
		 System.out.println(list.set(3,"javaee"));

		// public E get(int index):返回指定索引处的元素
		 System.out.println(list.get(0));//hello
		 System.out.println(list.get(1));//world
		 System.out.println(list.get(2));//java
		// IndexOutOfBoundsException
		 System.out.println(list.get(3));

		// public int size():返回集合中的元素的个数
		 System.out.println(list.size());//3
		
		// 输出集合
		 System.out.println("list:" + list);//list:[hello, world, java]

		// boolean contains(Object o) 如果此列表包含指定的元素,则返回 true
		 System.out.println(list.contains("world"));//true
		 
		// boolean addAll(int index, Collection c) 
		//将指定集合中的所有元素插入到此列表中,从指定的位置开始
		List list2 = new ArrayList<>();
		//addall前list2
		System.out.println(list2);// []
		System.out.println(list2.addAll(0, list));// true
		//addall后list2
		System.out.println(list2);// [hello, world, java]
	}

ArrayList独有

方法名说明
trimToSize()将内部存储的数组大小调整为列表中元素的实际数量。
ensureCapacity(int minCapacity)设置内部存储的数组大小,以容纳指定数量的元素。
toArray(T[] a)将列表中的元素转换为指定类型的数组
//toArray(T[] a)将列表中的元素转换为指定类型的数组
public class Main {
    public static void main(String[] args) {
        List<Integer> list = List.of(12, 34, 56);
        Integer[] array = list.toArray(new Integer[3]);
        for (Integer n : array) {
            System.out.println(n);
        }
    }
}
遍历方法
for循环

最基础的遍历方式:for循环,指定下标位置,使用 List 集合的 get(i) 方法来获取元素。

for(int i=0; i<list.size(); i++){
    System.out.println(list.get(i));
}
for-each循环

较为简洁的遍历方式:for-each循环,只能顺序遍历,不能对某一个指定元素进行操作。(这种方法在遍历数组和 Map 集合的时候同样适用)

for (String str : list){
    System.out.println(str);
}
迭代器
Iterator<String> itr = list.iterator();
while(itr.hasNext()){
    String str = itr.next();
    System.out.println(str);
}
forEach + Lambda表达式
list.forEach((str)->{
    System.out.println(str);
});
List转化为Array
循环遍历集合
ArrayList<Integer> resList = new ArrayList<>();
Collections.addAll(resList,666,888,999);    
int[] res = new int[resList.size()];  

for (int i = 0; i < resList.size(); i++) {
    res[i] = resList.get(i);
}
System.out.println(Arrays.toString(res));
调用toArray无参方法。

返回类型为Object[]类型的数组,无法强制转换为其他类型(如 int[] 、String[]等)。

ArrayList<Integer> resArr = new ArrayList<>();
Collections.addAll(resArr,666,888,999);
   
Object[] objectArr = resList.toArray();
   
System.out.println(Arrays.toString(objectArr));
调用toArray(T[] a)有参方法

转换为指定类型的数组

//转换为integer类型数组
ArrayList<Integer> resArr = new ArrayList<>();
Collections.addAll(resArr,666,888,999);
Integer[] integersArr = resList.toArray(new Integer[resList.size()]);
System.out.println(Arrays.toString(integersArr));
   
//转换为character类型数组
ArrayList<Character> cList = new ArrayList<>();
Collections.addAll(cList,'s','d','b');
Character[] charactersArr = cList.toArray(new Character[cList.size()]);
System.out.println(Arrays.toString(charactersArr));
   
//转换为String类型数组
ArrayList<String> sList = new ArrayList<>();
Collections.addAll(sList,"hello","world");
String[] StringArr = sList.toArray(new String[sList.size()]);
System.out.println(Arrays.toString(StringArr));

LinkedList

链表(Linked list)是一种常见的基础数据结构,是一种线性表,但是并不会按线性的顺序存储数据,而是在每一个节点里存到下一个节点的地址。

链表可分为单向链表和双向链表。

一个单向链表包含两个值: 当前节点的值和一个指向下一个节点的链接。

img

一个双向链表有三个整数值: 数值、向后的节点链接、向前的节点链接。

img

Java LinkedList(链表) 类似于 ArrayList,是一种常用的数据容器。

与 ArrayList 相比,LinkedList 的增加和删除的操作效率更高,而查找和修改的操作效率较低。

同ArrayList的区别

以下情况使用 ArrayList :

  • 频繁访问列表中的某一个元素。
  • 只需要在列表末尾进行添加和删除元素操作。

以下情况使用 LinkedList :

  • 你需要通过循环迭代来访问列表中的某些元素。
  • 需要频繁的在列表开头、中间、末尾等位置进行添加和删除元素操作。
常用方法

部分和ArrayList相同,同上

方法名说明
addFirst(E element)将元素添加到列表的开头
getFirst():返回列表的第一个元素。
getLast():返回列表的最后一个元素。
removeFirst():删除并返回列表的第一个元素。
removeLast():删除并返回列表的最后一个元素。

— |
| addFirst(E element) | 将元素添加到列表的开头 |
| getFirst(): | 返回列表的第一个元素。 |
| getLast(): | 返回列表的最后一个元素。 |
| removeFirst(): | 删除并返回列表的第一个元素。 |
| removeLast(): | 删除并返回列表的最后一个元素。 |

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

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

相关文章

Vue3 中使用 Vuex 和 Pinia 对比之 Vuex的用法

本文基于 Vue3 的 composition API 来展开 Vuex 和 Pinia 的用法比较 Pinia传送门 Vuex传送门 Vuex 状态管理的核心概念 状态- 驱动应用的数据源&#xff1b;视图 - 以声明方式将状态映射到视图&#xff1b;操作 - 响应在视图上的用户输入导致的状态变化 下面是源自Vuex 官…

【C++进阶06】红黑树图文详解及C++模拟实现红黑树

一、红黑树的概念及性质 1.1 红黑树的概念 AVL树用平衡因子让树达到高度平衡 红黑树可以认为是AVL树的改良 通过给每个节点标记颜色让树接近平衡 以减少树在插入节点的旋转 在每个结点新增一个存储位表示结点颜色 可以是Red或Black 通过对任何一条从根到叶子的路径上 各个结点…

P114 增强学习 RL ---没懂,以后再补充

sample: 如 70% 的概率向左 20%的概率向右 10% 的概率开火 不是left 分数最高,就直接向左。而是随机sample total reward (return) R 就是优化的目标,分数越高约好 -total reward= loss Policy Gradient 当环境是s 时

搭建算法日志自检小系统

&#x1f952; 前言 目前演示的是一个工具&#xff0c;但如此&#xff0c;未来完成有潜力可以演变为一整套系统。 &#x1f451;现场人员自检失败表计点位教程V2.0 NOTE: 如果没有“logfiles-meter-tool“目录的请联系我们进行提供&#xff01; &#x1f447; 进入<dist>…

ant-design-vue 1.x 的 a-form-model怎样设置表单必填项(a-form同样适用)

背景 "ant-design-vue": "1.7.6" vue2 吐槽 不知道公司为什么非要用蚂蚁金服1.x版本的组件&#xff0c;还是新项目&#xff0c;问题很多bug不少本文记录第一个必填项bug 问题 项目内a-form-model表单某几个属性需要增加必填项 试了以前element-ui的…

2024年湖北建筑安全员C证新政策,6个月锁定单位!如何破解?

2024年湖北建筑安全员C证新政策&#xff0c;6个月锁定单位&#xff01;如何破解&#xff1f; 2024年在湖北考一个建筑安全员C证过久才可以调出&#xff0c;湖北三类人员新取证满6个月之后才能调转。湖北省建筑安管人员考核管理系统&#xff08;也是就是三类报考调转系统&#…

58.leetcode 最后一个单词的长度

一、题目 二、解答 1. 思路 分2种情况 第一种情况只有一个单词&#xff0c;不包含空格&#xff1a;这种情况直接返回单词本身的长度。第二种情况包含空格&#xff1a;先去掉首尾的空格&#xff0c;根据空格切割字符串生成一个字符串列表&#xff0c;返回倒数第一个索引位置字…

LVS 负载均衡群集

本章展示&#xff1a; 了解群集的结构与工作模式 了解 LVS 负载均衡群集原理 学会配置 NFS 共享服务 学会构建 LVS-NAT 负载均衡群集 1.1 LVS 群集应用基础 群集的称呼来自于英文单词“Cluster”&#xff0c;表示一群、一串的意思&#xff0c;用在服务器领域则表 示大量服务…

龙芯3A5000上使用腾讯会议

原文链接&#xff1a;龙芯3A5000上使用腾讯会议 hello&#xff0c;大家好啊&#xff01;今天我要给大家介绍的是在龙芯3A5000处理器上安装使用腾讯会议的经验分享。随着远程工作和在线会议的普及&#xff0c;腾讯会议成为了许多人日常工作不可或缺的工具。而对于使用龙芯3A5000…

嵌入式-Stm32-江科大基于标准库通过GPIO点LED灯

文章目录 一&#xff1a;新建基于库函数开发的工程二&#xff1a;截图操作实现三&#xff1a;main.c 大致代码实现道友&#xff1a;凡事只想着蒙混过关&#xff0c;困难只会越来越多。我们要有&#xff0c;独立解决问题的能力&#xff0c;才能成长为更好的自己。 基于库函数开发…

Java的helloworld、IDEA一些快捷键、导入模块

一、Java的helloworld IDEA管理Java程序的结构 1.project&#xff08;项目、工程&#xff09; 2.moudule&#xff08;模块&#xff09; 3.package&#xff08;包&#xff09; 4.class&#xff08;类&#xff09; 上级包含多个下级&#xff0c;开发程序也是创建工程再创建…

算法34:贴纸拼词(力扣691题)

题目&#xff1a; 我们有 n 种不同的贴纸。每个贴纸上都有一个小写的英文单词。 您想要拼写出给定的字符串 target &#xff0c;方法是从收集的贴纸中切割单个字母并重新排列它们。如果你愿意&#xff0c;你可以多次使用每个贴纸&#xff0c;每个贴纸的数量是无限的。 返回你…

在linux中 centos7 连接xhell

网卡配置 仅主机要对应仅主机模式&#xff0c;NAT模式要对应NAT模式 一、在linux中centos7 连接xhell 实验&#xff1a;NAT模式对应NAT模式 以192.168.246.0段为例 1.进入虚拟机: 2.去真机修改&#xff1a; 3.然后去虚拟机里&#xff1a; 4.进入xhell修改&#xff1a; 再输…

【深度学习】Anaconda3 + PyCharm 的环境配置 1:手把手带你安装 PyTorch 并创建 PyCharm 项目

前言 文章性质&#xff1a;实操记录 &#x1f4bb; 主要内容&#xff1a;这篇文章记录了 PyTorch 的安装过程&#xff0c;包括&#xff1a; 1. 创建并激活新的虚拟环境&#xff1b; 2. 查看电脑是否支持 CUDA 以及 CUDA 的版本&#xff1b; 3. 根据 CUDA 的版本安装 PyTorch&am…

企业网络出口部署案例

知识改变命运&#xff0c;技术就是要分享&#xff0c;有问题随时联系&#xff0c;免费答疑&#xff0c;欢迎联系&#xff01; 厦门微思网络​​​​​​ https://www.xmws.cn 华为认证\华为HCIA-Datacom\华为HCIP-Datacom\华为HCIE-Datacom Linux\RHCE\RHCE 9.0\RHCA\ Oracle O…

uniapp运行自定义底座到真机没反应

同步资源失败&#xff0c;未得到同步资源的授权&#xff0c;请停止运行后重新运行&#xff0c;并注意手机上的授权提示。 如果此时手机没有任何反应&#xff0c;请检查自定义基座是否正确;如果是离线制作的自定义基座包&#xff0c; 请检查离线包制作是否正确。 网上各种查找报…

移动通信系统关键技术多址接入MIMO学习(8)

1.Multiple-antenna Techniques多天线技术MIMO&#xff0c;从SISO到SIMO到MISO到如今的MIMO&#xff1b; 2.SIMO单发多收&#xff0c;分为选择合并、增益合并&#xff1b;SIMO&#xff0c;基站通过两路路径将信号发送到终端&#xff0c;因为终端接收到的两路信号都是来自同一天…

【算法与数据结构】63、LeetCode不同路径 II

文章目录 一、题目二、解法三、完整代码 所有的LeetCode题解索引&#xff0c;可以看这篇文章——【算法和数据结构】LeetCode题解。 一、题目 二、解法 思路分析&#xff1a;参考【算法与数据结构】62、LeetCode不同路径的题目&#xff0c;可以发现本题仅仅是多了障碍物。我们还…

Kubernetes(K8S)云服务器实操TKE

一、 Kubernetes(K8S)简介 Kubernetes源于希腊语,意为舵手,因为首尾字母中间正好有8个字母,简称为K8S。Kubernetes是当今最流行的开源容器管理平台,是 Google 发起并维护的基于 Docker 的开源容器集群管理系统。它是大名鼎鼎的Google Borg的开源版本。 K8s构建在 Docker …

计算机网络系统结构-2020期末考试解析

【前言】 不知道为什么计算机网络一门课这么多兄弟&#xff0c;这份看着也像我们的学科&#xff0c;所以也做了。 一&#xff0e; 单选题&#xff08;每题 2 分&#xff0c;共 20 题&#xff0c;合计 40 分&#xff09; 1 、当数据由主机 A 发送到主机 B &#xff0c;不参…