List容器(Java)

news2025/2/12 8:05:25

文章目录

    • 1.容器介绍
      • 1.1 容器接口结构
      • 1.2 简单解析
    • 2. List容器创建
    • 3. 访问操作(get, iterator, for)
    • 4. 修改操作(add, remove, set)
    • 5. 容量操作(clear, contains, isEmpty, size)
    • 6. 其他操作(toArray, )
    • 7. 泛型操作

1.容器介绍

1.1 容器接口结构

  a. Java存储结构划分
  Java当中按照存储结构可以划分成为两个大类,分别是单列集合 java.util.Collection 和 双列集合 java.util.Map, 顾名思义Collection是实现单列集合的根接口, 而Map则是实现双列集合(键值对)的根接口。

  b. 单列接口Collection
在这里插入图片描述
  单列接口Collection当中下面可以看到存在许多的子接口例如,List接口,Set接口等等,今天我们着重介绍的就是List接口,即List容器当中的一些通用的操作和常用的实现类举例.

  c. List接口 : 有序 + 重复
在这里插入图片描述
  List接口当下拥有许多的实现类,其中常用的实现类有ArrayList,LinkedList,Vector等等,不同的实现类其底层实现的接口也会有不同,可能是用数组实现也可能是用链表进行实现的,不同的实现类也可能会拥有一些不同的操作方法。例如对于LinkList因为其底层实现了Deque接口所以其相对List接口以外还会有一些支持双端队头队尾的操作(addFirst, addLast)等.

1.2 简单解析

 A. 包路径:java.util.List
 B. List核心:单列 + 重复 + 有序
 C. 注意:下面使用ArrayList进行方法举例,所使用的方法全部是List接口的通用方法,不是ArrayList实现类的特有方法,是所有实现List接口实现类的所有通用方法,支持所有List接口下实现类的使用
 D. 常用实现类举例:
 ArrayList实现类:数组结构 + 查询快 + 增删慢
在这里插入图片描述

2. List容器创建

  a. 使用ArrayList实现类

import java.util.ArrayList;
import java.util.List;
public class Main {
	public static void main(String[] args) {
		List<Integer> list = new ArrayList<Integer>(); // 指定具体对象Integer的List容器
		
	}
}

3. 访问操作(get, iterator, for)

  a. 索引访问:因为是有序存储的,所以肯定是支持索引访问的,即可以通过索引进行访问指定位置元素
在这里插入图片描述

import java.util.ArrayList;
import java.util.List;
public class Main {
	public static void main(String[] args) {
		List<Integer> list = new ArrayList<Integer>();
		for(int i = 0; i < 5; i ++ ) list.add(i);
		
		for(int i = 0; i < list.size(); i ++ ) // list.get()
		System.out.println(list.get(i)); // 0 1 2 3 4
	}
}

  b. 迭代器访问:因为继承了迭代器Iterable接口,支持迭代器的访问操作
在这里插入图片描述

import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
public class Main {
	public static void main(String[] args) {
		List<Integer> list = new ArrayList<Integer>();
		for(int i = 0; i < 5; i ++ ) list.add(i);
		
		Iterator<Integer> it = list.iterator();
		while(it.hasNext()) {
			System.out.println(it.next()); // 0 1 2 3 4
		}
		
		it = list.listIterator(2); // 从指定位置开始的迭代器
		while(it.hasNext()) {
			System.out.println(it.next()); // 2 3 4
		}
	}
}

  c. 增强for循环:支持直接使用增强的for循环直接遍历容器内所有元素

import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
public class Main {
	public static void main(String[] args) {
		List<Integer> list = new ArrayList<Integer>();
		for(int i = 0; i < 5; i ++ ) list.add(i);
		
		for(Integer it : list) // 增强for循环直接遍历所有元素
		System.out.println(it); // 0 1 2 3 4
	}
}

4. 修改操作(add, remove, set)

  a. 元素添加 :
在这里插入图片描述

import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
public class Main {
	public static void main(String[] args) {
		List<Integer> list = new ArrayList<Integer>();
		
		for(int i = 3; i > 0; i -- ) list.add(i);
		for(int i : list) System.out.print(i + " "); // 3 2 1
		System.out.println();
		
		list.add(0, 100); // 向指定位置插入元素
		for(int i : list) System.out.print(i + " "); // 100 3 2 1
		
	}
}

  b. 元素删除:remove方法默认是删除指定位置上的元素,如果想使用第二个方法,一定要记得进行强制类型转换(如果存储的元素正好也是int类型), 才会自动对应上第二个方法
在这里插入图片描述

import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
public class Main {
	public static void main(String[] args) {
		List<Integer> list = new ArrayList<Integer>();
		for(int i = 3; i > 0; i -- ) list.add(i);
		list.add(2); // 3 2 1 2
		
		list.remove(3); // 根据索引删除
		for(int it : list) System.out.print(it + " "); // 3 2 1
		System.out.println();
		
		list.remove((Integer)3); // 注意 : 删除首次出现的元素对象(若有多个也只会删除第一个对象)
		for(int it : list) System.out.print(it + " "); // 2 1
		
	}
}

  c. 元素替换 :
在这里插入图片描述

import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
public class Main {
	public static void main(String[] args) {
		List<Integer> list = new ArrayList<Integer>();
		for(int i = 3; i > 0; i -- ) list.add(i); // 3 2 1
		
		list.set(0, 30); // 元素30替换0位置上的元素
		for(int it : list) System.out.print(it + " "); // 30 2 1
		
	}
}

5. 容量操作(clear, contains, isEmpty, size)

在这里插入图片描述

import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
public class Main {
	public static void main(String[] args) {
		List<Integer> list = new ArrayList<Integer>();
		for(int i = 3; i > 0; i -- ) list.add(i); // 3 2 1
		
		System.out.println(list.contains(1)); // true
		System.out.println(list.size()); // 3
		System.out.println(list.isEmpty()); // false
		list.clear();
		System.out.println(list.isEmpty()); // true
	}
}

6. 其他操作(toArray, )

a. toArray(): 将元素按适当顺序返回成为一个数组
在这里插入图片描述

import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
public class Main {
	public static void main(String[] args) {
		List<Integer> list = new ArrayList<Integer>();
		for(int i = 3; i > 0; i -- ) list.add(i); // 3 2 1
		
		Object[] arr = list.toArray();
		for(Object i : arr) System.out.print(i + " "); // 3 2 1
	}
}

7. 泛型操作

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

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

相关文章

通过使用动态ip解决网络连接问题

互联网的使用已经成为我们生活中不可或缺的一种生活方式。但是&#xff0c;有时候我们会遇到网络连接问题&#xff0c;如IP地址冲突、网络瘫痪等等。这种情况往往会影响我们的工作&#xff0c;现在我们一般使用动态ip地址来解决这些问题。 一、什么是动态ip地址 动态IP地址是由…

小白也可以做智慧大屏?我来帮你踩踩坑!【华为云Astro低代码体验季】

前提 进入华为云官网进行操作&#xff1a;https://www.huaweicloud.com/ Astro的便捷 其内部丰富的组件&#xff0c;简洁的操作&#xff0c;可支持独立空间管理&#xff0c;让人可以在短时间内就完成非常炫酷以及功能完善的页面 进入编辑页面后&#xff0c;可通过选择左侧的…

GPIO(嵌入式学习)

GPIO知识学习 1. GPIO的基本概念2. GPIO的实际应用3. 功能描述3.1 IO结构框图3.2 知识铺垫模拟/数字信号VDD、VSS、VCC施密特触发器片上外设 3.3 功能详述浮空输入上拉输入下拉输入模拟输入开漏输出推挽输出 4. GPIO相关寄存器4.1 寄存器4.2 功能 1. GPIO的基本概念 GPIO是英文…

java面经1

String, StringBuffer, StringBuilder区别 第一点是可变性。String不可变&#xff0c;String Buffer和StringBuider可变。这是因为String被final修饰&#xff0c;每次操作都生成新的对象。StringBuffer和StringBuilder的父类AbstractStringBuilder没有被final修饰。 第二点是…

视频点播系统

服务端功能模块划分 数据管理模块&#xff1a;负责针对客户端上传的视频信息进行管理。 网络通信模块&#xff1a;搭建网络通信服务器&#xff0c;实现与客户端通信。 业务处理模块&#xff1a;针对客户端的各个请求进行对应业务处理并响应结果。 前端界面模块&#xff1a;…

openEuler 开源汇智赢未来|2023开放原子全球开源峰会OpenAtom openEuler 论坛成功召开

6 月 12 日&#xff0c;2023 开放原子全球开源峰会 OpenAtom openEuler 分论坛在北京成功召开。分论坛以“openEuler 汇众智&#xff0c;奔涌向前赢未来”为主题&#xff0c;展示了 openEuler 社区的最新成果&#xff0c;阐述了 openEuler 开源开放的发展模式&#xff0c;介绍了…

jmeter模拟多用户并发

目录 前言&#xff1a; 一、100个真实的用户 二、100个用户同时登录 前言&#xff1a; JMeter可以轻松地模拟多用户并发&#xff0c;从而测试Web应用程序的性能和稳定性。 一、100个真实的用户 1、一个账号模拟100虚拟用户同时登录和100账号同时登录 区别 &#xff08;…

如何使用Github搭建个人博客

介绍 在本文中&#xff0c;我将介绍如何使用GitHub搭建个人博客&#xff08;免费&#xff09;。GitHub是一个功能强大的版本控制和协作平台&#xff0c;它也可以用来托管和发布静态网页。通过将你的个人博客托管在GitHub上&#xff0c;你可以享受到版本控制的好处&#xff0c;…

STL之stack和queue

目录 stack和queue模拟实现一.介绍1.stack的类模板2.queue的类模板3.容器适配器 二. deque类1. 简介2.常用成员函数 三. stack模拟实现1.成员函数2.代码 四.queue的模拟实现1.成员函数2.代码 五.小结1.容器适配器 stack和queue模拟实现 一.介绍 1.stack的类模板 LIFO&#xf…

剖析Linux文件系统

Linux 文件系统体系结构是一个对复杂系统进行抽象化的有趣例子。通过使用一组通用的 API 函数&#xff0c;Linux 可以在许多种存储设备上支持许多种文件系统。例如&#xff0c;read 函数调用可以从指定的文件描述符读取一定数量的字节。read 函数不了解文件系统的类型&#xff…

外包,以后再也不去了....

先说一下自己的个人情况&#xff0c;大专生&#xff0c;18年通过校招进入湖南某软件公司&#xff0c;干了接近3年的点点点&#xff0c;后来我面了几家公司都没面上&#xff0c;最后把我想去外包混几个月的想法和我在腾讯的老哥讲了&#xff0c;他说外包&#xff0c;狗都不去&am…

打开Adobe软件出现弹窗“Adobe app is not available”无法使用的解决方法

运行Adobe软件遇到“Adobe app is not avAIlable”&#xff0c;是因为Adobe程序的 DNS 服务器无法联网验证&#xff0c;那么该怎么解决呢&#xff1f;搜索了一些网友用户的分享&#xff0c;大家可以试试看。 Adobe app 方法很简单&#xff0c;就是hosts添加屏蔽&#xff0c;使…

JDK21要来了,并发编程更加丝滑了

大家好&#xff0c;我是风筝&#xff0c;公众号「古时的风筝」&#xff0c;专注于 Java技术 及周边生态。 我的个人网站&#xff1a;古时的风筝 目前 Java 的最新稳定版是 JDK 20&#xff0c;但这是个过渡版&#xff0c;JDK21就是 LTS 版的了&#xff0c;也快要发布了&#xff…

Neu5Ac Methyl Ester ,145240-80-8用于什么领域?解析化学式:C20H29NO13

为大家介绍&#xff08;CAS&#xff1a;145240-80-8&#xff09;,试剂仅用于科学研究&#xff0c;不可用于人类&#xff0c;非药用&#xff0c;非食用。 CAS号&#xff1a;145240-80-8 分子式&#xff1a;C20H29NO13 分子量&#xff1a;491.44 中文名称&#xff1a;N-乙酰神经氨…

YUV420笔记

YUV420 有YU12、YV12、NV12、NV21 YU12存储格式是 YU12存储格式是YU13中的UV顺序反过来 NV12存储格式是 NV21是NV12数据取反 YUV420_888 是YCbCr的泛化格式&#xff0c;不会具体指明是YU12&#xff0c;YV12&#xff0c;NV12&#xff0c;或是是NV21。它能够表示任何4:2:0的平…

微信小程序实现订阅消息推送的实现步骤

1、准备工作 准备小程序账号、开发环境&#xff0c;我小程序是基于uniapp开发&#xff0c;后台代码基于SpringBoot开发。同时先阅读官方文档&#xff0c;了解小程序订阅消息和后端如何发送订阅消息等相关知识&#xff0c;官方文档地址如下&#xff1a; 《小程序订阅消息》《发…

【C++】4.websocket:websocketpp安装与使用

&#x1f60f;★,:.☆(&#xffe3;▽&#xffe3;)/$:.★ &#x1f60f; 这篇文章主要介绍websocketpp的安装与使用。 学其所用&#xff0c;用其所学。——梁启超 欢迎来到我的博客&#xff0c;一起学习&#xff0c;共同进步。 喜欢的朋友可以关注一下&#xff0c;下次更新不迷…

【Java】《On Java》第12章 集合 读书笔记

结合JavaGuide和《On Java》的集合笔记。 不要使用时代的眼泪Vector、HashTable、Stack。 文章目录 1 泛型与类型安全的集合2 基本概念3 添加一组元素★4 集合的打印5 ListtoArray的使用 ★Collection.sort的使用 6 ArrayList6.1 ArrayList成员变量6.2 ArrayList构造函数6.3 A…

没有公网IP,如何实现数据共享?

数据共享就是让在不同地方使用不同计算机、不同软件的用户能够读取他人数据并进行各种操作、运算和分析。不同层次、不同部门信息系统间&#xff0c;信息和信息产品的交流与共用&#xff0c;就是把信息这一种在互联网时代中重要性越趋明显的资源与其他人共同分享。 数据共享有…

SpeechGen:用提示解锁语音语言模型(Speech LM)的生成能力

论文链接&#xff1a; https://arxiv.org/pdf/2306.02207.pdf Demo: https://ga642381.github.io/SpeechPrompt/speechgen.html Code: https://github.com/ga642381/SpeechGen 引言与动机 大型语言模型 &#xff08;LLMs&#xff09;在人工智能生成内容&#xff08;AIGC…