当前位置: 首页 > news >正文

Java 中 List 接口的学习笔记

1. 什么是 List?

在 Java 中,List 是一个接口,属于 Java Collections Framework。它表示一个有序的集合,可以包含重复元素。List 接口允许通过索引访问元素,提供了多种实现方式,如 ArrayListLinkedList

2. List 的特点

  • 有序性:元素的插入顺序被保存,可以通过索引访问元素。
  • 可重复性:可以存放重复的元素。
  • 动态大小:与数组不同,List 的大小可以动态调整。

3. List 的常用实现类

3.1 ArrayList

  • 基于动态数组实现。
  • 随机访问速度快,插入和删除操作较慢(特别是在中间位置)。
  • 适合于频繁查询,但不频繁修改的场景。

示例代码

import java.util.ArrayList;ArrayList<String> list = new ArrayList<>();
list.add("Hello");
list.add("World");
list.add("Hello"); // 允许重复元素System.out.println(list.get(0)); // 输出: Hello
System.out.println(list.size()); // 输出: 3

3.2 LinkedList

  • 基于双向链表实现。
  • 插入和删除操作效率高,特别是在中间位置。
  • 随机访问速度慢,因为需要遍历链表。

示例代码

import java.util.LinkedList;LinkedList<String> linkedList = new LinkedList<>();
linkedList.add("Hello");
linkedList.add("World");
linkedList.addFirst("Start"); // 在链表头部插入System.out.println(linkedList.get(1)); // 输出: Hello
System.out.println(linkedList.size()); // 输出: 3

4. List 接口的常用方法

当然可以!以下是关于 Java 中 List 接口的常用方法的详细介绍,包括代码示例。

4. List 接口的常用方法及示例

4.1 添加元素

  • add(E e):在列表末尾添加元素。
import java.util.ArrayList;ArrayList<String> list = new ArrayList<>();
list.add("Apple");
list.add("Banana");
list.add("Cherry");System.out.println(list); // 输出: [Apple, Banana, Cherry]
  • add(int index, E element):在指定位置插入元素。
list.add(1, "Orange"); // 在索引1的位置插入元素
System.out.println(list); // 输出: [Apple, Orange, Banana, Cherry]

4.2 获取元素

  • get(int index):返回指定位置的元素。
String fruit = list.get(2);
System.out.println(fruit); // 输出: Banana

4.3 修改元素

  • set(int index, E element):用指定元素替换指定位置的元素。
list.set(0, "Grapes"); // 将索引0的元素替换为"Grapes"
System.out.println(list); // 输出: [Grapes, Orange, Banana, Cherry]

4.4 删除元素

  • remove(int index):移除指定位置的元素。
list.remove(1); // 移除索引1的元素
System.out.println(list); // 输出: [Grapes, Banana, Cherry]
  • remove(Object obj):移除列表中第一次出现的指定元素。
list.remove("Banana"); // 移除元素"Banana"
System.out.println(list); // 输出: [Grapes, Cherry]

4.5 查找元素

  • indexOf(Object o):返回指定元素第一次出现的索引,若不存在则返回 -1。
int index = list.indexOf("Cherry");
System.out.println(index); // 输出: 1
  • contains(Object o):检查列表中是否包含指定元素。
boolean containsGrapes = list.contains("Grapes");
System.out.println(containsGrapes); // 输出: true

4.6 其他方法

  • size():返回列表中的元素数量。
int size = list.size();
System.out.println(size); // 输出: 2
  • isEmpty():检查列表是否为空。
boolean isEmpty = list.isEmpty();
System.out.println(isEmpty); // 输出: false
  • clear():清空列表。
list.clear();
System.out.println(list); // 输出: []
  • toArray():将列表转化为数组。
list.add("Mango");
list.add("Peach");
Object[] fruitsArray = list.toArray();
for (Object fruit : fruitsArray) {System.out.println(fruit); // 输出: Mango, Peach
}

5. List 的时间复杂度

操作ArrayListLinkedList
添加元素 (末尾)O(1)O(1)
添加元素 (指定位置)O(n)O(n)
获取元素O(1)O(n)
删除元素O(n)O(n)
查找元素O(n)O(n)

6. 总结

List 接口是 Java 集合框架的重要组成部分,提供了灵活的动态数组和链表实现。通过理解不同实现的特点及其适用场景,能够帮助我们在编程中做出更合适的选择。

练习

  1. 使用 ArrayList 实现一个简单的待办事项列表,支持添加、删除和查看待办事项。
  2. 使用 LinkedList 实现一个简单的浏览历史记录,支持前进和后退操作。

通过这些练习,你将加深对 Java 中 List 接口的理解和使用。希望这份笔记能帮助你更好地学习和掌握 Java 中的集合!

相关文章:

Java 中 List 接口的学习笔记

1. 什么是 List&#xff1f; 在 Java 中&#xff0c;List 是一个接口&#xff0c;属于 Java Collections Framework。它表示一个有序的集合&#xff0c;可以包含重复元素。List 接口允许通过索引访问元素&#xff0c;提供了多种实现方式&#xff0c;如 ArrayList 和 LinkedLis…...

【原生js案例】webApp实现鼠标移入移出相册放大缩小动画

图片相册这种动画效果也很常见&#xff0c;在我们的网站上。鼠标滑入放大图片&#xff0c;滑出就恢复原来的大小。现在我们使用运动定时器来实现这种滑动效果。 感兴趣的可以关注下我的系列课程【webApp之h5端实战】&#xff0c;里面有大量的css3动画效果制作原生知识分析&…...

LVGL9 定时器模块

文章目录 前言定时器系统概述特点 定时器的创建函数&#xff1a;lv_timer_create函数&#xff1a;lv_timer_create_basic 定时器的控制函数&#xff1a;lv_timer_ready函数&#xff1a;lv_timer_reset 定时器的参数设置函数&#xff1a;lv_timer_set_cb函数&#xff1a;lv_time…...

Qt学习笔记第51到60讲

第51讲 记事本实现打开功能 回到第24个功能文件Notepad&#xff0c;给UI中的各个控件添加槽函数。 ①开始按钮 void Widget::on_btnOpen_clicked() {QString fileNameQFileDialog::getOpenFileName(this,tr("Open File"),"E:\\6_Qt Projects\\24_Notepad\\fi…...

网页设计--axios作业

根据以下mock地址中的json数据&#xff0c;使用axios异步方式获取并显示在页面中。 https://apifoxmock.com/m1/3761592-3393136-default/peotfindAll?apifoxApiId171582689 {"code": 1,"msg": "success","data": [{"id": …...

SpringBoot 整合 Avro 与 Kafka 详解

SpringBoot 整合 Avro 与 Kafka 详解 在大数据处理和实时数据流场景中&#xff0c;Apache Kafka 和 Apache Avro 是两个非常重要的工具。Kafka 作为一个分布式流处理平台&#xff0c;能够高效地处理大量数据&#xff0c;而 Avro 则是一个用于序列化数据的紧凑、快速的二进制数…...

若依 ruoyi VUE el-select 直接获取 选择option 的 label和value

1、最新在研究若依这个项目&#xff0c;我使用的是前后端分离的方案&#xff0c;RuoYi-Vue-fast(后端) RuoYi-Vue-->ruoyi-ui(前端)。RuoYi-Vue-fast是单应用版本没有区分那么多的modules 自己开发起来很方便&#xff0c;这个项目运行起来很方便&#xff0c;但是需要自定义的…...

大数据-155 Apache Druid 架构与原理详解 数据存储 索引服务 压缩机制

点一下关注吧&#xff01;&#xff01;&#xff01;非常感谢&#xff01;&#xff01;持续更新&#xff01;&#xff01;&#xff01; 目前已经更新到了&#xff1a; Hadoop&#xff08;已更完&#xff09;HDFS&#xff08;已更完&#xff09;MapReduce&#xff08;已更完&am…...

修改MySQL存储路径

1.查看原路径 show variables like ‘%datadir%’; 2.停止MYSQL 以管理员身份运行命令提示符 net stop MySQL84 在服务中直接停止MySQL 3.编辑配置文件 可能会遇到无权限修改&#xff0c;可以先修改my.ini的权限。可以通过&#xff1a;右键my.ini → 属性 → 安全→ 编辑 …...

Git常用的命令【提交与回退】

git分布式版本控制系统 &#xff08;SVN集中式版本控制系统&#xff09;之间的对比 git有本地仓库和远程仓库&#xff0c;不同的开发人员可以分别提交自己的本地仓库并维护代码的版本控制。 然后多个人员在本地仓库协作的代码&#xff0c;可以提交到远程仓库中做整合。 git本…...

详解:HTTP/HTTPS协议

HTTP协议 一.HTTP是什么 HTTP&#xff0c;全称超文本传输协议&#xff0c;是一种用于分布式、协作式、超媒体信息系统的应用层协议。HTTP往往是基于传输层TCP协议实现的&#xff0c;采用的一问一答的模式&#xff0c;即发一个请求&#xff0c;返回一个响应。 Q&#xff1a;什…...

0.96寸OLED---STM32

一、简介 OLED&#xff1a;有机发光二极管 OLED显示屏&#xff1a;性能优异的新型显示屏&#xff0c;具有功耗低&#xff08;相比LCD不需要背光源&#xff0c;每一个节点当度发光&#xff09;、响应速度快、宽视角&#xff08;自发光&#xff0c;从任何视角看都比较清晰&…...

保姆级教学 uniapp绘制二维码海报并保存至相册,真机正常展示图片二维码

一、获取二维码 uni.request({url: https://api.weixin.qq.com/wxa/getwxacode?access_token${getStorage("token")},responseType: "arraybuffer",method: "POST",data: {path: "/pages/index/index"},success(res) {// 转换为 Uint…...

常用Vim操作

vimrc配置 ctags -R * 生成tags文件 set number set ts4 set sw4 set autoindent set cindent set tag~/tmp/log/help/tags 自动补全&#xff1a; ctrln&#xff1a;自动补全 输入&#xff1a; a&#xff1a;从当前文字后插入i&#xff1a;从当前文字前插入s: 删除当前字…...

【C#】NET 9中LINQ的新特性-CountBy

前言 在 .NET 中,使用 LINQ 对元素进行分组并计算它们的出现次数时,需要通过两个步步骤。首先,使用 GroupBy方法根据特定键对元素进行分类。然后,再计算每个组元素包含个数。而随着 .NET 9 版本发布,引入了一些新特性。其中 LINQ 引入了一种新的方法 CountBy,本文一起来了…...

Trimble X9三维激光扫描仪高效应对化工厂复杂管道扫描测绘挑战【沪敖3D】

化工安全关系到国计民生&#xff0c;近年来随着化工厂数字化改革不断推进&#xff0c;数字工厂逐步成为工厂安全管理的重要手段。而化工管道作为工厂设施的重要组成部分&#xff0c;由于其数量多、种类繁杂&#xff0c;一直是企业管理的重点和难点。 传统的化工管廊往往缺乏详…...

【数据结构】文件和外部排序

外部排序 外存信息的存取 计算基本存储方式 内部存储&#xff08;主存&#xff09;&#xff1a;断电后数据会丢失&#xff0c;访问速度快&#xff0c;成本高容量通常较小外部存储&#xff08;辅存&#xff09;&#xff1a;断电后数据不会丢失&#xff0c;访问速度较慢&#x…...

新手学习:网页前端、后端、服务器Tomcat和数据库的基本介绍

首先一点&#xff0c;不管是那个框架开发的网页前端&#xff0c;最后都需要Build,构建完毕以后都是原始的HTML CSS JS 三样文件&#xff01; 网页前端 目录结构 在开始开发网站之前&#xff0c;首先需要了解如何组织文件。一个简单的网页项目通常会有以下几个文件夹和文件&…...

机器学习贝叶斯模型原理

一、引言 在机器学习与数据分析的广袤天地中&#xff0c;贝叶斯模型犹如一颗璀璨的明星&#xff0c;闪耀着独特的光芒&#xff0c;为众多领域的分类、预测等任务提供了强大的理论支撑与实用解法。然而&#xff0c;对于许多初涉此领域的小伙伴而言&#xff0c;贝叶斯模型背后的…...

【C++】实现100以内素数的求解

博客主页&#xff1a; [小ᶻ☡꙳ᵃⁱᵍᶜ꙳] 本文专栏: C 文章目录 &#x1f4af;前言&#x1f4af;代码概览&#x1f4af;代码结构与逻辑分析1. 包含的头文件和命名空间2. 素数判断函数 isPrime功能输入与输出核心逻辑数学背景 3. 主函数 main功能核心逻辑输出示例 &#…...

PangoDesign Suite与Modelsim协同仿真:从库编译到实战排错全解析

1. 为什么需要PangoDesign Suite与Modelsim协同仿真 第一次接触FPGA仿真时&#xff0c;我也被各种专业术语绕晕了。直到某次项目出现时序问题&#xff0c;才发现仿真工具就像汽车的"安全气囊"——平时感觉不到存在&#xff0c;关键时刻能救命。PangoDesign Suite&…...

东方博宜OJ入门题解:从A+B到高精度算法的实战解析

1. 东方博宜OJ平台入门指南 第一次接触在线评测系统(OJ)时&#xff0c;很多人都会被各种题目搞得晕头转向。东方博宜OJ作为国内知名的编程练习平台&#xff0c;特别适合编程新手从零开始系统学习。我刚开始刷题时也走过不少弯路&#xff0c;今天就和大家分享一些实战经验。 这…...

Windows极速ADB驱动一键安装:告别繁琐配置的终极指南

Windows极速ADB驱动一键安装&#xff1a;告别繁琐配置的终极指南 【免费下载链接】Latest-adb-fastboot-installer-for-windows A Simple Android Driver installer tool for windows (Always installs the latest version) 项目地址: https://gitcode.com/gh_mirrors/la/Lat…...

手把手教你用Zynq-7100 FPGA实现100Mbps OOK信号定时同步(含完整Verilog代码)

基于Zynq-7100的OOK信号定时同步实战&#xff1a;从算法到FPGA实现全解析 在无线通信系统中&#xff0c;定时同步是数字接收机设计中最关键的环节之一。当我们需要在Xilinx Zynq-7100 FPGA平台上实现100Mbps OOK信号的接收处理时&#xff0c;面临的最大挑战是如何在仅有50MHz外…...

数据与大语言模型融合:从NL2SQL到RAG架构的实践指南

1. 项目概述&#xff1a;当数据遇见大语言模型如果你是一名数据工程师、数据分析师&#xff0c;或者任何需要和数据打交道的开发者&#xff0c;最近肯定被“大语言模型”和“数据智能”这两个词轮番轰炸。我们手里有海量的数据&#xff0c;从结构化的业务表到非结构化的日志、文…...

Godot引擎集成CEF实现Web混合渲染:gdcef项目架构与实战指南

1. 项目概述与核心价值最近在折腾一个老项目的现代化改造&#xff0c;需要把传统的桌面应用嵌入到Web视图中&#xff0c;实现混合渲染。在技术选型时&#xff0c;我绕不开一个名字&#xff1a;CEF&#xff0c;也就是Chromium Embedded Framework。它几乎是桌面应用内嵌浏览器控…...

全网首份DeepSeek-MMLU交叉验证报告:在真实业务场景中,高分≠高可用——5类典型失败案例与鲁棒性加固方案

更多请点击&#xff1a; https://intelliparadigm.com 第一章&#xff1a;DeepSeek-MMLU基准测试成绩全景概览 MMLU&#xff08;Massive Multitask Language Understanding&#xff09;是评估大语言模型跨学科知识广度与推理能力的关键基准&#xff0c;涵盖57个学科领域&#…...

ClawPowers-Skills:开发者实战技能库与个人工具箱构建指南

1. 项目概述与核心价值最近在GitHub上看到一个挺有意思的项目&#xff0c;叫“ClawPowers-Skills”&#xff0c;作者是up2itnow0822。乍一看这个标题&#xff0c;你可能会有点摸不着头脑——“ClawPowers”是什么&#xff1f;“Skills”又具体指什么&#xff1f;这其实是一个典…...

AI代码生成规则引擎实战:从约束设计到团队规范落地

1. 项目概述&#xff1a;一个为代码生成引擎定制的“规则引擎” 在AI辅助编程和代码生成领域&#xff0c;我们常常面临一个核心矛盾&#xff1a;我们希望AI能像一位经验丰富的搭档&#xff0c;理解我们的意图&#xff0c;生成高质量、符合规范的代码&#xff1b;但现实是&…...

青岛X射线探伤机服务好的供应商

在工业检测领域&#xff0c;X射线探伤机并非一次性采购的设备——它需要持续的技术支持、稳定的运行保障&#xff0c;以及服务商在关键时刻的响应能力。选择一家服务好的供应商&#xff0c;往往比选择一台设备本身更需要慎重。在青岛&#xff0c;有一家名为华誉机电设备有限公司…...