Java语言程序设计——篇十一(2)
🌿🌿🌿跟随博主脚步,从这里开始→博主主页🌿🌿🌿
- 欢迎大家:这里是我的学习笔记、总结知识的地方,喜欢的话请三连,有问题可以私信🌳🌳🌳
您的点赞👍、关注➕、收藏⭐️、评论📝、私信📧是我最大的支持与鼓舞!!!🌻🌻🌻
🚩集合——List
- 集合框架
- List接口及实现类
- List的操作
- ArrayList类
- 实战演练
- 遍历集合元素
- 实战演练
- 数组转换为List对象
- 综合实例
集合框架
- 集合框架是Java以类库的形式提供了用户开发程序时可直接使用的各种数据结构。
- 数据结构:以某种形式将数据组织在一起,不仅支持存储数据,还支持访问和处理数据。
- 在面向对象思想里,一种数据结构被认为是一个容器(集合)。
- Java集合框架提供了一些现成的数据结构可供使用,这些数据结构是可以存储对象的集合,在这里对象也称为元素。
- Java集合框架由两种类型构成:
1️⃣Collection,用于存放一组对象。
2️⃣Map ,用于存放一组“关键字/值”的对象。
- 基本操作
boolean add(E e):向集合中添加元素e
boolean remove(Object o):从集合中删除指定的元素o
boolean contains(Object o):返回集合中是否包含指定元素
boolean isEmpty():判空
int size():返回集合中所包含元素的个数
Iterator iterator():返回包含所有元素的迭代器对象 - 批量操作
boolean addAll(Collection<? extends E> c) 功能:将集合c中的所有元素添加到当前集合中 boolean removeAll(Collection<?> c)
功能:从当前集合中删除集合c中的所有元素
default boolean removeIf(Predicate<? super E> filter)
功能:从当前集合中删除满足谓词的所有元素 - 数组操作
Object[] toArray() :用来返回包含集合中所有元素的Object型数组
eg: Object[] a = c.toArray();
T[] toArray(T[] a):用来返回包含集合中所有元素的指定类型的数组
eg: String[] a = c.toArray(new String[0]); - 流(Stream)操作
default Stream stream()
功能:以当前集合作为源返回一个顺序Stream对象
default Stream parallelStream()
功能:以当前集合作为源返回一个并行Stream对象
List接口及实现类
- 列表接口List是Collection的子接口,它是一种包含有序元素的线性表,其中的元素可重复,也可以是空值null。
- 存放在List中的元素有一个下标(从0开始),可通过下标访问List中的元素。
List的操作
- 因为List接口为Collection的子接口,所以List接口拥有Collection接口提供的所有常用方法。
- List是列表类型,它还提供了一些适合于自身的常用方法,如下页表所示。
方 法 名 称 | 功 能 简 介 |
---|---|
void add(int index, E obj) | 用来向列表的指定索引位置添加对象,其他对象的索引位置相对后移一位。索引位置从0开始 |
E remove(int index) | 用来清除列表中指定索引位置的对象 |
E set(int index, E obj) | 用来将列表中指定索引位置的对象修改为指定的对象 |
E get(int index) | 用来获得指定索引位置的对象 |
int indexOf(Object obj) | 用来获得指定对象的第一个索引位置。当不存在时,返回-1 |
int lastIndexOf(Object obj) | 用来获得指定对象的最后一个索引位置。当不存在时,返回-1 |
List <?> subList(int from, int to) | 返回从from(包含)到to(不包含)的一个List列表 |
listIterator() | 用来获得一个包含所有对象的ListIterator型实例 |
ArrayList类
- List接口的常用实现类有ArrayList和LinkedList,在使用线性表时,通常情况下声明为List类型,实例化时根据实际情况的需要,实例化为ArrayList或LinkedList。
- 例如:
// 利用ArrayList类实例化List
List<String> list1 = new ArrayList<String>();
// 利用LinkedList类实例化List
List<String> list2 = new LinkedList<String>();
- ArrayList类是通过数组实现的集合对象,它实际上实现了一个变长的对象数组,元素可以动态的增加和删除。
- 数组结构的优点是便于对列表进行快速的随机访问, 如果经常需要根据索引位置访问集合中的对象,使用ArrayList类实现的列表的效率较高。
- 数组结构的缺点是向指定索引位置插入对象、删除指定索引位置对象的速度较慢。
- 当在指定索引位置插入对象时,会将指定索引位置及其后的所有元素相应地向后移动一位,如下图所示:
- 当删除指定索引位置的对象时,会将指定索引位置之后的所有元素相应地向前移动一位,如下图所示:
- 进行插入、删除操作时,如果在指定的索引位置之后有大量的对象,将严重影响对集合的操作效率。
- ArrayList类的构造方法
public ArrayList():创建初始容量为10的空数组列表
public ArrayList(int i):创建初始容量为i的空数组列表
public ArrayList(Collection c):创建包含容器c中所有元素的数组列表
实战演练
例:TestArrayList.java
import java.util.ArrayList;
public class TestArrayList {
public static void main(String[] args) {ArrayList<String> cityList = new ArrayList<>();//add some cities in the listcityList.add("Beijing");//cityList now contains[Beijing]cityList.add("London");//cityList now contains[Beijing,London]cityList.add("Shanghai");//cityList now contains[Beijing,London,Shanghai]cityList.add(" Beijing");//cityList now contains[Beijing,London,Shanghai, Beijing]cityList.add("Taiyuan");//cityList now contains[Beijing,London,Shanghai, Beijing,Taiyuan]System.out.println("List size="+cityList.size());System.out.println("Is Taiyuan in the list?"+cityList.contains("Taiyuan"));System.out.println("The location of Shanghai in the list?"+cityList.indexOf("Shanghai"));System.out.println("Is the list empty?"+cityList.isEmpty());cityList.add(2, "Xian"); // [Beijing,London,Xian,Shanghai, Beijing,Taiyuan]cityList.remove(“Shanghai"); // [Beijing,London,Xian,Beijing,Taiyuan]cityList.remove(1); // [Beijing,Xian,Beijing,Taiyuan]System.out.println(cityList.toString()); for(int i=cityList.size()-1;i>=0;i--)System.out.print(cityList.get(i)+" ");}
}
遍历集合元素
- 对集合中元素访问时,经常需要按某种次序对每一个元素访问且仅访问一次,这就是遍历,也称迭代。
- 对集合元素遍历有如下4种方式:
a.简单的for循环
for(int i=0; i<array.size(); i++) String o = array.get(i);
b.增强的for循环
for(String elm:array) System.out.println(elm)
c.Iterator迭代器对象
d.ListIterator迭代器对象
c.Iterator迭代器对象
- 每个实现Collection接口的容器对象都可调用iterator()方法返回一个Iterator对象,称为迭代器对象。
- 接口Iterator支持对List对象的从前向后的遍历,该接口定义了3个方法。
- 1)boolean hasNext():返回迭代器是否有下一个元素
2)E next(): 返回下一个元素
3)void remove():删除迭代器中的当前元素
Iterator iterator = array.iterator(); //得到迭代器对象
while(iterator.hasNext())System.out.println(iterator.next());
for(Iterator iterator = array.iterator(); iterator.hasNext();)System.out.println(iterator.next());
d.ListIterator迭代器对象
- 通过List接口提供的listIterator()方法可以返回ListIterator对象,它支持对线性表双向遍历。
- ListIterator是Iterator的子接口,不但继承了Iterator接口中的方法,还定义了多个方法。
boolean hasNext() :返回是否还有下一个元素
boolean hasPrevious() :返回是否还有前一个元素
E next():返回下一个元素
E previous():返回前一个元素
int nextIndex():返回下一个元素的索引
int previousIndex():返回前一个元素的索引
void add(E o):当前位置插入一个元素
void remove():删除当前元素
void set(E o):修改当前元素
实战演练
例:使用ListIterator对象实现反向输出线性表中的元素。
import java.util.*;
public class IteratorDemo{public static void main(String[] args) {List<String> myList = new ArrayList<String>();myList.add("one");myList.add("two");myList.add("three");myList.add("four");ListIterator<String> iterator = myList.listIterator();// 将迭代器指针移动到线性表末尾while(iterator.hasNext()){iterator.next();}// 从后向前访问线性表的每个元素while (iterator.hasPrevious())System.out.println(iterator.previous());}
}
数组转换为List对象
- java.util.Arrays类提供了一个asList()方法,它将数组转换成List对象,定义如下:
public static <T> List<T> asList(T… a)参数可以为数组,可以是数组元素
String[] str = {"one", "two", "three"};
List<String> list = Arrays.asList(str);
List<String> list = Arrays.asList("one", "two", "three");
- Arrays.asList()方法返回的List对象不可变。若要对该List对象进行添加、删除等操作,可以将其作为参数传递给另一个List的构造方法。
List<String> list1 = new ArrayList<>(list);
综合实例
编写程序,实现一个对象栈类MyStack,要求使用ArrayList类实现该栈,该栈类的UML图如下所示。
import java.util.ArrayList;
import java.util.List; public class MyStack<T> { private List<T> list; // 构造函数 public MyStack() { list = new ArrayList<>(); } // 判断栈是否为空 public boolean isEmpty() { return list.isEmpty(); } // 返回栈的大小 public int getSize() { return list.size(); } // 返回栈顶元素但不移除 public T peek() { if (isEmpty()) { throw new IllegalStateException("Stack is empty"); } return list.get(list.size() - 1); } // 弹出栈顶元素 public T pop() { if (isEmpty()) { throw new IllegalStateException("Stack is empty"); } return list.remove(list.size() - 1); } // 元素入栈 public void push(T t) { list.add(t); } // 元素查找方法,返回元素在栈中的位置(从栈底开始计数,即第一个元素位置为0),如果未找到则返回-1 public int search(T t) { for (int i = 0; i < list.size(); i++) { if (list.get(i).equals(t)) { return i; // 注意这里返回的是从栈底开始的位置 } } return -1; // 未找到 } // 可选:打印栈内容(用于调试) public void printStack() { System.out.println("Stack content (bottom to top):"); for (int i = 0; i < list.size(); i++) { System.out.println(list.get(i)); } } // 主函数,用于测试MyStack类 public static void main(String[] args) { MyStack<Integer> stack = new MyStack<>(); stack.push(1); stack.push(2); stack.push(3); System.out.println("Stack size: " + stack.getSize()); System.out.println("Top element: " + stack.peek()); System.out.println("Popped element: " + stack.pop()); System.out.println("Element 2 position: " + stack.search(2)); stack.printStack(); }
}
博主用心写,读者点关注,互动传真情,知识不迷路。
相关文章:
Java语言程序设计——篇十一(2)
🌿🌿🌿跟随博主脚步,从这里开始→博主主页🌿🌿🌿 欢迎大家:这里是我的学习笔记、总结知识的地方,喜欢的话请三连,有问题可以私信🌳🌳&…...
Linux 应急响应靶场练习 1
靶场在知攻善防实验室公众号中可以获取 前景需要:小王急匆匆地找到小张,小王说"李哥,我dev服务器被黑了",快救救我!! 挑战内容: (1)黑客的IP地址 (2࿰…...
AWS-Lambda的使用
介绍 Lambda 是一种无服务器(Serverless), 而且设计成事件驱动的计算服务器. 简单来说, 你可以将你的 code 上传, 当有事件产生(例如cronjob , 或者S3有新的文件被上传上來) , 你的code 就会在瞬间(零点几秒以內)被叫起來执行. 由于你不用管 Server如何维护, 或者自动扩展之类…...
python3.12 搭建MinerU 环境遇到的问题解决
报错: AttributeError: module pkgutil has no attribute ImpImporter. Did you mean: zipimporter? ERROR: Exception: Traceback (most recent call last):File "D:\ipa_workspace\MinerU\Lib\site-packages\pip\_internal\cli\base_command.py", …...
基于SpringBoot+Vue的流浪猫狗救助救援网站(带1w+文档)
基于SpringBootVue的流浪猫狗救助救援网站(带1w文档) 基于SpringBootVue的流浪猫狗救助救援网站(带1w文档) 该流浪猫狗救助救援网站在Windows平台下完成开发,采用java编程语言开发,将应用程序部署于Tomcat上,加之MySQL接口来实现交互式响应服…...
56_AOP
AOP使用案例 如何进行数据库和Redis中的数据同步?/ 你在项目的那些地方使用了aop?答:可以通过Aop操作来实现数据库和Redis中的数据同步。/ 通过Aop操作来实现数据库和Redis中的数据同步。可以定义一个切面类,通过对控制器下的所有…...
安装了h5py,使用报错ImportError: DLL load failed while importing _errors
使用pip 安装了h5py,但是运行代码报错; from . import _errorsImportError: DLL load failed while importing _errors: 找不到指定的程序。 原因: 可能和不正确安装h5py这个包有关系 解决: pip uninstall h5py 换成使用conda…...
BootStrap前端面试常见问题
在前端面试中,关于Bootstrap的问题通常围绕其基本概念、使用方式、特性以及实际应用等方面展开。以下是一些常见的问题及其详细解答: 1. Bootstrap是哪家公司研发的? 回答:Bootstrap是由Twitter的Mark Otto和Jacob Thornton合作…...
在linux运维中为什么第一道防线是云防火墙,而不是waf
在Linux运维和云计算环境中,第一道防线通常是云防火墙(Cloud Firewall),而不是Web应用防火墙(WAF),主要是因为云防火墙提供了更基础和广泛的网络层安全控制。以下是一些关键原因: 1…...
2022年中国高校计算机大赛-团队程序设计天梯赛(GPLT)上海理工大学校内选拔赛
2022年中国高校计算机大赛-团队程序设计天梯赛(GPLT)上海理工大学校内选拔赛 2024.8.2 12:00————16:00 过题数790/1500 补题数943.33/1500 AB Problem Komorebi的数学课 次佛锅 Setsuna的K数列 Wiki下象棋 黄金律法 天气预报 叠硬币 AB Problem ag…...
多语言海外AEON抢单可连单加额外单源码,java版多语言抢单系统
多语言海外AEON抢单可连单加额外单源码,java版多语言抢单系统。此套是全新开发的java版多语言抢单系统。 后端java,用的若依框架,这套代码前后端是编译后的,测试可以正常使用,语言繁体,英文,日…...
文件上传——springboot大文件分片多线程上传功能,前端显示弹出上传进度框
一、项目搭建 创建 Spring Boot 项目: 创建一个新的 Spring Boot 项目,添加 Web 依赖。 添加依赖: 在 pom.xml 文件中添加以下依赖: <dependency><groupId>commons-fileupload</groupId><artifactId>commons-fileupload</artifactId&…...
每日学术速递8.2
1.A Scalable Quantum Non-local Neural Network for Image Classification 标题: 用于图像分类的可扩展量子非局部神经网络 作者: Sparsh Gupta, Debanjan Konar, Vaneet Aggarwal 文章链接:https://arxiv.org/abs/2407.18906 摘要&#x…...
SAP-PLM创建物料主数据接口
FUNCTION zplm_d_0001_mm01. *"---------------------------------------------------------------------- *"*"本地接口: *" EXPORTING *" VALUE(EX_TOTAL) TYPE CHAR4 *" VALUE(EX_SUCCESSFUL) TYPE CHAR4 *" …...
超声波眼镜清洗机哪个品牌好?四款高性能超声波清洗机测评剖析
对于追求高生活质量的用户来说,眼镜的清洁绝对不能马虎。如果不定期清洁眼镜,时间久了,镜片的缝隙中会积累大量的灰尘和细菌,眼镜靠近眼部,对眼部健康有很大影响。在这种情况下,超声波清洗机显得尤为重要。…...
卸载Windows软件的正确姿势,你做对了吗?
前言 今天有小伙伴突然问我:她把软件都卸载了,但是怎么软件都还在运行? 这个问题估计很多小伙伴都是遇到过的,对于电脑小白来说,卸载Windows软件真的真的真的是一件很难的事情。所以,今天咱们就来讲讲&am…...
WEB前端14-Element UI(学生查询表案例/模糊查询/分页查询)
Vue2-Element UI 1.可重用组件的开发 可重用组件 我们一般将可重复使用的组件放在components目录之下,以便父组件的灵活调用 <!--可重用组件一般与css密切相关,使用可重用组件的目的是,将相似的组件放在一起,方便使用-->…...
使用swiftui自定义圆形进度条实现loading
实现的代码如下: // // LoadingView.swift // SwiftBook // // Created by Song on 2024/8/2. //import SwiftUIstruct LoadingView: View {State var process 0.5var body: some View {VStack(spacing: 20) {ZStack {Circle().stroke(.gray.opacity(0.3), lin…...
C# 设计模式之抽象工厂模式
总目录 前言 工厂方法模式是为了克服简单工厂模式的缺点而设计出来的,简单工厂模式的工厂类随着产品类的增加需要增加额外的代码,而工厂方法模式每个具体工厂类只完成单个实例的创建,所以它具有很好的可扩展性。但是在现实生活中,…...
Javascript前端面试基础(八)
window.onload和$(document).ready区别 window.onload()方法是必须等到页面内包括图片的所有元素加载完毕后才能执行$(document).ready()是DOM结构绘制完毕后就执行,不必等到加载完毕 window.onload 触发时机:window.onload 事件会在整个页面…...
R 语言学习教程,从入门到精通,R的安装与环境的配置(2)
1、R的安装与环境的配置 R语言是一款完全免费且开源的软件,它的开源许可证是GNU通用公共许可证(GPL),这意味着任何人都可以自由地使用、复制、修改和发布R语言的源代码,甚至可以将其用于商业用途。 和python等其他语言…...
Python批量下载音乐功能
Python批量下载音乐功能 Python批量下载音乐,调用API接口,同时下载歌曲和歌词 先安排一下要用的模块,导入进来。 import re import json import requests目录结构 下载音乐 Awking_Class.pymusic.txt 文件文件写的是音乐名字,使用换行分割 new_music 注意这个 ne…...
用 Bytebase 实现批量、多环境、多租户数据库的丝滑变更
Bytebase 提供了多种功能来简化批量变更管理,适用于多环境或多租户情况。本教程将指导您如何使用 部署配置 和 数据库组 在不同场景下进行数据库批量变更。 默认流水线 vs 部署配置 图片数据库 vs 数据库组 1. 准备 请确保已安装 Docker,如果本地没有重…...
java之方法引用 —— ::
目录 一、简介 二、引用静态方法 1.格式 2.示例 编辑 3.条件解析 三、引用成员方法 1.格式 2.示例 四、引用构造方法 1.格式 2.示例 五、类名引用成员方法 1.格式 2.略微不同的方法引用规则 3.示例 六、引用数组的构造方法 1.格式 2.示例 一、简介 方…...
「测试线排查的一些经验-上篇」 后端工程师
文章目录 端口占用脚本失灵线上部署项目结构模版配置文件生效 一般产品研发过程所使用的环境可分为: 研发环境-dev测试环境-test生产环境-prod 软件开发中,完整测试环境包括:UT、IT、ST、UAT UT Unit Test 单元测试 IT System Integration …...
AOSP12_BatteryStats统计电池数据信息
前言 BatteryStats模块主要用于设备在电池供电是系统对各个模块电量使用的统计,Android提供的Battery Historain工具就是对此模块统计的数据进行解析和展示。 一 BatteryStats模块类图 模块主要类图如下:见根目录的模块类图 BatteryStats:抽象类,本模块的核心类,主要定…...
【Android Studio】UI 布局
文章目录 view布局LinearLayout view 在Android开发中,View是一个非常重要的概念,它是所有用户界面组件的基类。View类及其子类构成了Android应用中的用户界面。每个View都占用屏幕上的一个矩形区域,并可以响应用户输入(如触摸、按…...
虚拟机Windows server忘记密码解决方法
原理 utilman.exe是Windows辅助工具管理器程序,虽然它本身不是一个关键的系统进程,但通过修改这个文件,用户可以访问一些有用的UI设置。在某些情况下,比如忘记密码需要重置时,通过修改utilman.exe文件为c…...
【香橙派系列教程】(六)嵌入式SQLite数据库
【六】嵌入式SQLite数据库 文章目录 【六】嵌入式SQLite数据库1.简介2.SQLite数据库安装3.SQLite命令用法1.创建数据库2.创建和查看表格3.插入查看数据(记录)4.删除更改数据(记录) 4.SQLite编程操作1.打开/创建数据库的C接口2.创建…...
深入探讨PHP8的新特性与性能优化
本文由 ChatMoney团队出品 随着互联网技术的飞速发展,PHP作为后端开发领域的热门语言也在不断演进。近期,PHP8的发布引起了广泛关注。本文将为您详细介绍PHP8的新特性以及性能优化,并通过具体示例帮助您更好地理解和应用这些新特性。 一、PH…...
如何建设网站视频/杭州seo泽成
ADC的资源 12位ADC是一种逐次逼近型模拟数字数字转换器。它有多达18个通道,可测量16个外部和2个内部信号源。ADC的输入时钟不得超过14MHZ,它是由PCLK2经分频产生。如果被ADC转换的模拟电压低于低阀值或高于高阀值,AWD模拟看门狗状态位被设置。 ADC使用方法 ADC通常要与DM…...
百度快速排名案例/天津百度关键词seo
参考答案如下单选的服端I dont like to take the subway.题统中听并switch 语句中可以没有 default 子句。作系Swim, let nature cleanse your heart; read, let the words warmyour stillness; keep a raise, let free conditioning your exhaustion; put out of your mind, l…...
做的烂的大网站/百度提交入口网址是什么
wxaParse/css.js / page-frame vv.js...
wordpress自定义栏目是什么意思/网站推广策略有哪些
列表操作:遍历、range()、列表解析、列表切片、列表复制、元组1. 遍历列表letters [A,B,C,D,E,F,G]for letter in letters:print(letter)输出:ABCDEFG记得for ...... :有冒号,循环内容要缩进(indent)来表示它属于当前循环。缩进约定俗成打4个…...
天河网站 建设seo信科分公司/百度自然搜索排名优化
点击上方“Github爱好者社区”,选择星标回复“资料”,获取小编整理的一份资料圆栗子 发自 凹非寺 量子位 报道熟练使用命令行,是成为一个老司机必备的技能。这里有一份入门&进阶指南,名字叫“命令行的艺术”,在Git…...
画册设计1p一般多少钱/网站seo优化
数位DP 什么是数位DP 数位DP是DP的一种,顾名思义,按每一个数位来进行DP。 什么时候使用 题目的要求与一个数字相关,并且它能通过每一个数位来进行转移。 例题:求所有nnn位数中能被mmm整除的数的个数。 怎么使用 一般的DP是多…...