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

Java语言程序设计——篇十一(2)

在这里插入图片描述
在这里插入图片描述

       🌿🌿🌿跟随博主脚步,从这里开始→博主主页🌿🌿🌿

  • 欢迎大家:这里是我的学习笔记、总结知识的地方,喜欢的话请三连,有问题可以私信🌳🌳🌳
    您的点赞👍、关注➕、收藏⭐️、评论📝、私信📧是我最大的支持与鼓舞!!!🌻🌻🌻

🚩集合——List

  • 集合框架
  • List接口及实现类
    • List的操作
    • ArrayList类
      • 实战演练
    • 遍历集合元素
      • 实战演练
    • 数组转换为List对象
        • 综合实例

集合框架

  • 集合框架是Java以类库的形式提供了用户开发程序时可直接使用的各种数据结构
  • 数据结构:以某种形式将数据组织在一起,不仅支持存储数据,还支持访问和处理数据。
  • 在面向对象思想里,一种数据结构被认为是一个容器(集合)。
  • Java集合框架提供了一些现成的数据结构可供使用,这些数据结构是可以存储对象的集合,在这里对象也称为元素。
  • Java集合框架由两种类型构成:
        1️⃣Collection,用于存放一组对象。
        2️⃣Map ,用于存放一组“关键字/值”的对象。
    在这里插入图片描述
  1. 基本操作
    boolean add(E e):向集合中添加元素e
    boolean remove(Object o):从集合中删除指定的元素o
    boolean contains(Object o):返回集合中是否包含指定元素
    boolean isEmpty():判空
    int size():返回集合中所包含元素的个数
    Iterator iterator():返回包含所有元素的迭代器对象
  2. 批量操作
    boolean addAll(Collection<? extends E> c) 功能:将集合c中的所有元素添加到当前集合中 boolean removeAll(Collection<?> c)
    功能:从当前集合中删除集合c中的所有元素
    default boolean removeIf(Predicate<? super E> filter)
    功能:从当前集合中删除满足谓词的所有元素
  3. 数组操作
    Object[] toArray() :用来返回包含集合中所有元素的Object型数组
    eg: Object[] a = c.toArray();
    T[] toArray(T[] a):用来返回包含集合中所有元素的指定类型的数组
    eg: String[] a = c.toArray(new String[0]);
  4. 流(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)

&#x1f33f;&#x1f33f;&#x1f33f;跟随博主脚步&#xff0c;从这里开始→博主主页&#x1f33f;&#x1f33f;&#x1f33f; 欢迎大家&#xff1a;这里是我的学习笔记、总结知识的地方&#xff0c;喜欢的话请三连&#xff0c;有问题可以私信&#x1f333;&#x1f333;&…...

Linux 应急响应靶场练习 1

靶场在知攻善防实验室公众号中可以获取 前景需要&#xff1a;小王急匆匆地找到小张&#xff0c;小王说"李哥&#xff0c;我dev服务器被黑了",快救救我&#xff01;&#xff01; 挑战内容&#xff1a; &#xff08;1&#xff09;黑客的IP地址 &#xff08;2&#xff0…...

AWS-Lambda的使用

介绍 Lambda 是一种无服务器(Serverless), 而且设计成事件驱动的计算服务器. 简单来说, 你可以将你的 code 上传, 当有事件产生(例如cronjob , 或者S3有新的文件被上传上來) , 你的code 就会在瞬间(零点几秒以內)被叫起來执行. 由于你不用管 Server如何维护, 或者自动扩展之类…...

python3.12 搭建MinerU 环境遇到的问题解决

报错&#xff1a; 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平台下完成开发&#xff0c;采用java编程语言开发&#xff0c;将应用程序部署于Tomcat上&#xff0c;加之MySQL接口来实现交互式响应服…...

56_AOP

AOP使用案例 如何进行数据库和Redis中的数据同步&#xff1f;/ 你在项目的那些地方使用了aop&#xff1f;答&#xff1a;可以通过Aop操作来实现数据库和Redis中的数据同步。/ 通过Aop操作来实现数据库和Redis中的数据同步。可以定义一个切面类&#xff0c;通过对控制器下的所有…...

安装了h5py,使用报错ImportError: DLL load failed while importing _errors

使用pip 安装了h5py&#xff0c;但是运行代码报错&#xff1b; from . import _errorsImportError: DLL load failed while importing _errors: 找不到指定的程序。 原因&#xff1a; 可能和不正确安装h5py这个包有关系 解决&#xff1a; pip uninstall h5py 换成使用conda…...

BootStrap前端面试常见问题

在前端面试中&#xff0c;关于Bootstrap的问题通常围绕其基本概念、使用方式、特性以及实际应用等方面展开。以下是一些常见的问题及其详细解答&#xff1a; 1. Bootstrap是哪家公司研发的&#xff1f; 回答&#xff1a;Bootstrap是由Twitter的Mark Otto和Jacob Thornton合作…...

在linux运维中为什么第一道防线是云防火墙,而不是waf

在Linux运维和云计算环境中&#xff0c;第一道防线通常是云防火墙&#xff08;Cloud Firewall&#xff09;&#xff0c;而不是Web应用防火墙&#xff08;WAF&#xff09;&#xff0c;主要是因为云防火墙提供了更基础和广泛的网络层安全控制。以下是一些关键原因&#xff1a; 1…...

2022年中国高校计算机大赛-团队程序设计天梯赛(GPLT)上海理工大学校内选拔赛

2022年中国高校计算机大赛-团队程序设计天梯赛&#xff08;GPLT&#xff09;上海理工大学校内选拔赛 2024.8.2 12:00————16:00 过题数790/1500 补题数943.33/1500 AB Problem Komorebi的数学课 次佛锅 Setsuna的K数列 Wiki下象棋 黄金律法 天气预报 叠硬币 AB Problem ag…...

多语言海外AEON抢单可连单加额外单源码,java版多语言抢单系统

多语言海外AEON抢单可连单加额外单源码&#xff0c;java版多语言抢单系统。此套是全新开发的java版多语言抢单系统。 后端java&#xff0c;用的若依框架&#xff0c;这套代码前后端是编译后的&#xff0c;测试可以正常使用&#xff0c;语言繁体&#xff0c;英文&#xff0c;日…...

文件上传——springboot大文件分片多线程上传功能,前端显示弹出上传进度框

一、项目搭建 创建 Spring Boot 项目: 创建一个新的 Spring Boot 项目&#xff0c;添加 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 标题&#xff1a; 用于图像分类的可扩展量子非局部神经网络 作者&#xff1a; Sparsh Gupta, Debanjan Konar, Vaneet Aggarwal 文章链接&#xff1a;https://arxiv.org/abs/2407.18906 摘要&#x…...

SAP-PLM创建物料主数据接口

FUNCTION zplm_d_0001_mm01. *"---------------------------------------------------------------------- *"*"本地接口&#xff1a; *" EXPORTING *" VALUE(EX_TOTAL) TYPE CHAR4 *" VALUE(EX_SUCCESSFUL) TYPE CHAR4 *" …...

超声波眼镜清洗机哪个品牌好?四款高性能超声波清洗机测评剖析

对于追求高生活质量的用户来说&#xff0c;眼镜的清洁绝对不能马虎。如果不定期清洁眼镜&#xff0c;时间久了&#xff0c;镜片的缝隙中会积累大量的灰尘和细菌&#xff0c;眼镜靠近眼部&#xff0c;对眼部健康有很大影响。在这种情况下&#xff0c;超声波清洗机显得尤为重要。…...

卸载Windows软件的正确姿势,你做对了吗?

前言 今天有小伙伴突然问我&#xff1a;她把软件都卸载了&#xff0c;但是怎么软件都还在运行&#xff1f; 这个问题估计很多小伙伴都是遇到过的&#xff0c;对于电脑小白来说&#xff0c;卸载Windows软件真的真的真的是一件很难的事情。所以&#xff0c;今天咱们就来讲讲&am…...

WEB前端14-Element UI(学生查询表案例/模糊查询/分页查询)

Vue2-Element UI 1.可重用组件的开发 可重用组件 我们一般将可重复使用的组件放在components目录之下&#xff0c;以便父组件的灵活调用 <!--可重用组件一般与css密切相关&#xff0c;使用可重用组件的目的是&#xff0c;将相似的组件放在一起&#xff0c;方便使用-->…...

使用swiftui自定义圆形进度条实现loading

实现的代码如下&#xff1a; // // 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# 设计模式之抽象工厂模式

总目录 前言 工厂方法模式是为了克服简单工厂模式的缺点而设计出来的&#xff0c;简单工厂模式的工厂类随着产品类的增加需要增加额外的代码&#xff0c;而工厂方法模式每个具体工厂类只完成单个实例的创建&#xff0c;所以它具有很好的可扩展性。但是在现实生活中&#xff0c…...

Javascript前端面试基础(八)

window.onload和$(document).ready区别 window.onload()方法是必须等到页面内包括图片的所有元素加载完毕后才能执行$(document).ready()是DOM结构绘制完毕后就执行&#xff0c;不必等到加载完毕 window.onload 触发时机&#xff1a;window.onload 事件会在整个页面&#xf…...

IDEA运行Tomcat出现乱码问题解决汇总

最近正值期末周&#xff0c;有很多同学在写期末Java web作业时&#xff0c;运行tomcat出现乱码问题&#xff0c;经过多次解决与研究&#xff0c;我做了如下整理&#xff1a; 原因&#xff1a; IDEA本身编码与tomcat的编码与Windows编码不同导致&#xff0c;Windows 系统控制台…...

Debian系统简介

目录 Debian系统介绍 Debian版本介绍 Debian软件源介绍 软件包管理工具dpkg dpkg核心指令详解 安装软件包 卸载软件包 查询软件包状态 验证软件包完整性 手动处理依赖关系 dpkg vs apt Debian系统介绍 Debian 和 Ubuntu 都是基于 Debian内核 的 Linux 发行版&#xff…...

新能源汽车智慧充电桩管理方案:新能源充电桩散热问题及消防安全监管方案

随着新能源汽车的快速普及&#xff0c;充电桩作为核心配套设施&#xff0c;其安全性与可靠性备受关注。然而&#xff0c;在高温、高负荷运行环境下&#xff0c;充电桩的散热问题与消防安全隐患日益凸显&#xff0c;成为制约行业发展的关键瓶颈。 如何通过智慧化管理手段优化散…...

数据库分批入库

今天在工作中&#xff0c;遇到一个问题&#xff0c;就是分批查询的时候&#xff0c;由于批次过大导致出现了一些问题&#xff0c;一下是问题描述和解决方案&#xff1a; 示例&#xff1a; // 假设已有数据列表 dataList 和 PreparedStatement pstmt int batchSize 1000; // …...

Java面试专项一-准备篇

一、企业简历筛选规则 一般企业的简历筛选流程&#xff1a;首先由HR先筛选一部分简历后&#xff0c;在将简历给到对应的项目负责人后再进行下一步的操作。 HR如何筛选简历 例如&#xff1a;Boss直聘&#xff08;招聘方平台&#xff09; 直接按照条件进行筛选 例如&#xff1a…...

招商蛇口 | 执笔CID,启幕低密生活新境

作为中国城市生长的力量&#xff0c;招商蛇口以“美好生活承载者”为使命&#xff0c;深耕全球111座城市&#xff0c;以央企担当匠造时代理想人居。从深圳湾的开拓基因到西安高新CID的战略落子&#xff0c;招商蛇口始终与城市发展同频共振&#xff0c;以建筑诠释对土地与生活的…...

Python Einops库:深度学习中的张量操作革命

Einops&#xff08;爱因斯坦操作库&#xff09;就像给张量操作戴上了一副"语义眼镜"——让你用人类能理解的方式告诉计算机如何操作多维数组。这个基于爱因斯坦求和约定的库&#xff0c;用类似自然语言的表达式替代了晦涩的API调用&#xff0c;彻底改变了深度学习工程…...

Scrapy-Redis分布式爬虫架构的可扩展性与容错性增强:基于微服务与容器化的解决方案

在大数据时代&#xff0c;海量数据的采集与处理成为企业和研究机构获取信息的关键环节。Scrapy-Redis作为一种经典的分布式爬虫架构&#xff0c;在处理大规模数据抓取任务时展现出强大的能力。然而&#xff0c;随着业务规模的不断扩大和数据抓取需求的日益复杂&#xff0c;传统…...

go 里面的指针

指针 在 Go 中&#xff0c;指针&#xff08;pointer&#xff09;是一个变量的内存地址&#xff0c;就像 C 语言那样&#xff1a; a : 10 p : &a // p 是一个指向 a 的指针 fmt.Println(*p) // 输出 10&#xff0c;通过指针解引用• &a 表示获取变量 a 的地址 p 表示…...

Unity中的transform.up

2025年6月8日&#xff0c;周日下午 在Unity中&#xff0c;transform.up是Transform组件的一个属性&#xff0c;表示游戏对象在世界空间中的“上”方向&#xff08;Y轴正方向&#xff09;&#xff0c;且会随对象旋转动态变化。以下是关键点解析&#xff1a; 基本定义 transfor…...