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

章六、集合(1)—— 概念、API、List 接口及实现类、集合迭代

零、 关闭IDEA调试时自动隐藏空元素


一、 集合的概念


存储一个班学员信息,假定一个班容纳20名学员

        当我们需要保存一组一样(类型相同)的元素的时候,我们应该使用一个容器来存储,数组就是这样一个容器。

数组有什么缺点?

        数组一旦定义,长度将不能再变化。然而在我们的开发实践中,经常需要保存一些变长的数据集合,于是,我们需要一些能够动态增长长度的容器来保存我们的数据。

而我们需要对数据的保存的逻辑可能各种各样,于是就有了各种各样的数据结构。Java中对于各种数据结构的实现,就是我们用到的集合。

集合和数组既然都是容器,它们的区别:

        数组的长度是固定的。集合的长度是可变的。

        数组中存储的是同一类型的元素,可以存储基本数据类型值。集合存储的都是对象。而且对象的类型可以不一致。在开发中一般当对象多的时候,使用集合进行存储。

二、 集合 API


集合体系概述

        Java的集合框架是由很多接口、抽象类、具体类组成的,都位于java.util包中。

单列集合:一次放进去一个值(对象)

双列集合:键值

三、 Collection 接口


Collection 接口:定义了存取一组对象的方法,其子接口 Set 和 List 分别定义了存储方式:

        ● Set 中的数据对象不可以重复。

        ● List 中的数据对象有顺序(添加顺序)且可以重复。

四、 List 接口及实现类


  List 的实现类

List继承了Collection接口,有三个实现的类

ArrayList :数组列表,数据采用数组方式存储。

LinkedList :链表

Vector :数组列表,添加同步锁,线程安全的

  ArrayList

        • ArrayList 实现

        ArrayList实现了长度可变的数组,在内存中分配连续的空间。遍历元素和随机访问元素的效率比较高

        • ArrayList 常用方法

add(E element)   //在数组尾部添加

add(int index , E element)  //在索引处添加

get(int index)   //获得索引处的值

indexOf(Object o)    //返回指定字符在此字符串中第一次一次出现处的索引

lastIndexOf(Object o)    //返回指定字符在此字符串中最后一次出现处的索引

remove(int index)   // 删除并返回指定位置元素

set(int index, E element)    //用于替换动态数组中指定索引的元素

import java.util.ArrayList;
import java.util.Arrays;public class ArrayListDemo1 {public static void main(String[] args) {ArrayList arrayList = new ArrayList();//添加元素(数组尾部)arrayList.add("a");arrayList.add(1);arrayList.add('b');arrayList.add("a");arrayList.add(true);System.out.println(arrayList);//在指定索引处添加元素,其他依次后移arrayList.add(1,"new");System.out.println(arrayList);//获得索引处的元素System.out.println("arrayList.get(1) = "+arrayList.get(1));//返回指定字符在此字符串中第一次出现处的索引System.out.println(arrayList.indexOf("a"));  //0//返回指定字符在此字符串中最后一次出现处的索引System.out.println(arrayList.lastIndexOf("a"));  //4//删除元素(单次)arrayList.remove("a");   //通过直接输入删除的值来删arrayList.remove(1);   //通过索引来删除System.out.println(arrayList);arrayList.remove("1");  //数字只能通过索引来删除System.out.println(arrayList);arrayList.remove("b");  //遇到重复相同的字符串,只会删除第一个System.out.println(arrayList);//删除元素(指定索引处),其后的依次前移arrayList.remove(1);System.out.println(arrayList);//替换元素(不考虑元素类型)arrayList.set( 1,"newNew");System.out.println(arrayList);//清空元素arrayList.clear();System.out.println(arrayList);//判断是否为空System.out.println(arrayList.isEmpty()); //true }
}

         • 易错处

由于ArrayList可以存储任何类型的对象,而遍历时,会默认为Object类型,要使用子类的还要涉及向下转型,既麻烦又不可取。因而Java引入一种泛型( <E> ),用来限制可以输入的对象类型

public class ArrayList<E> extends AbstractList<E>

import java.util.ArrayList;public class ArrayListDemo3 {public static void main(String[] args) {/*集合容器中默认可以添加Object类型*///但是不建议,毕竟好进去不好出来//因而我们使用 <>泛型 来限定输入的类型ArrayList<String> arrayList = new ArrayList();arrayList.add("a");//arrayList.add(1); //报错}
}

  LinkedList

        • LinkedList 实现

LinkedList采用链表存储方式。插入、删除元素时效率比较高

        • LinkedList 常用方法

add(int index , Object element)        //添加

addFirist(Object element)        //头添加

addLast(Object element)        //尾添加

get(int index)        //获得索引元素

removeFirst()       // 返回头元素

removeLast()        //返回尾元素

remove(int index)  //删除并返回索引的元素

getFirst()   //获得头元素

getLast()   //获得尾元素

import java.util.LinkedList;public class LinkListDemo1 {public static void main(String[] args) {LinkedList<String> linkedList = new LinkedList<>();linkedList.add("a");linkedList.add("b");linkedList.add("c");System.out.println(linkedList);linkedList.add(1,"dd"); //向指定位置插入System.out.println(linkedList);//获取指定位置上的元素System.out.println(linkedList.get(1));//删除并返回是否删除成功System.out.println(linkedList.remove("a")); System.out.println(linkedList);System.out.println(linkedList.pop()); //从这个列表表示的堆栈中弹出一个元素。弹出意味着移除并返回这个列表的第一个元素。}
}

  Vector 

 Vector 数组列表,添加同步锁,它是线程安全的

import java.util.Vector;
/*
数组列表,线程安全的*/
public class VectorDemo {public static void main(String[] args) {Vector<String> vector = new Vector<>();vector.add("a");vector.add("b");vector.add("c");}
}

五、 List接口集合迭代


  for循环遍历

import java.util.ArrayList;
import java.util.Arrays;public class ListTraverse {public static void main(String[] args) {ArrayList<String> arrayList = new ArrayList<>();arrayList.add("a");arrayList.add("b");arrayList.add("c");/*通过for循环遍历*/for(int i = 0;i<arrayList.size();i++){System.out.println(arrayList.get(i));}System.out.println();//for循环时可以修改元素for(int i = 0;i<arrayList.size();i++){if("a".equals(arrayList.get(i))){arrayList.remove(i);}System.out.println(arrayList.get(i));}System.out.println();}
}

  增强for循环的遍历

import java.util.ArrayList;
import java.util.Arrays;public class ListTraverse {public static void main(String[] args) {ArrayList<String> arrayList1 = new ArrayList<>();arrayList1.add("a");arrayList1.add("b");arrayList1.add("c");/*通过增强for循环遍历*/for(String s:arrayList1){System.out.println(s);}System.out.println();//增强for循环时不允许修改元素for(String s:arrayList1){if(s.equals("a")){arrayList1.remove(s);}System.out.println(s);}}
}

        注:增强for循环遍历元素时,不允许修改元素(增添或删除)

  迭代器遍历(Iterator)

import java.util.ArrayList;
import java.util.Iterator;public class ListTraverse1 {public static void main(String[] args) {ArrayList<String> arrayList = new ArrayList<>();arrayList.add("a");arrayList.add("b");arrayList.add("c");/*使用迭代器遍历*///获得集合对象的迭代器对象Iterator<String> it = arrayList.iterator();while (it.hasNext()){String s = it.next();//获取到下一个元素System.out.println(s);}ArrayList<String> arrayList1 = new ArrayList<>();arrayList1.add("a");arrayList1.add("b");arrayList1.add("c");Iterator<String> its = arrayList1.iterator();while (its.hasNext()){String s = its.next();//获取到下一个元素if(s.equals("a")){its.remove(); //使用迭代器对象删除元素}System.out.println(s);}}
}

相关文章:

章六、集合(1)—— 概念、API、List 接口及实现类、集合迭代

零、 关闭IDEA调试时自动隐藏空元素 一、 集合的概念 存储一个班学员信息&#xff0c;假定一个班容纳20名学员 当我们需要保存一组一样&#xff08;类型相同&#xff09;的元素的时候&#xff0c;我们应该使用一个容器来存储&#xff0c;数组就是这样一个容器。 数组有什么缺…...

原生js html5 canvas制作flappy bird压扁小鸟游戏

可以以电脑浏览器的手机模式打开&#xff0c;也可以在手机浏览器中直接打开 游戏运用了Canvas的drawImage&#xff0c;translate&#xff0c;rotate&#xff0c;save&#xff0c;restore&#xff0c;fillRect等API。 采用中介者模式&#xff0c;Game类统领全局&#xff0c;负责…...

服务器集群 -- nginx配置tcp负载均衡

当面临高流量、高可用性、水平扩展、会话保持或跨地域流量分发等需求时&#xff0c;单台服务器受限于硬件资源、性能有限不能满足应用场景的并发需求量时&#xff0c;引入负载均衡器部署多个服务器共同处理客户端的并发请求&#xff0c;可以帮助优化系统架构&#xff0c;提高系…...

现代DevOps如何改变软件开发格局

在软件开发的早期&#xff0c;该过程通常是开发人员编写代码&#xff0c;再将其交给质量保证&#xff08;QA&#xff09;进行测试。这种瀑布开发方法可能会导致质量问题和延迟&#xff0c;因为问题是在周期后期发现的。 一、了解DevOps和测试左移 DevOps是Development和Opera…...

如何在WordPress网站上设置多语言展示

在今天的全球化世界中&#xff0c;拥有多语言网站对于吸引更广泛的受众至关重要。前不就我们遇到Hostease的客户咨询我们的在线客服&#xff0c;他想要对他的wordpress网站支持多语言。我们提供给客户可以尝试以下的插件来支持多语言。 在本教程中&#xff0c;我们将逐步介绍如…...

Pinia和Vuex有什么区别?

API设计&#xff1a; Pinia的API设计更加简洁和直观。它采用了类似于Vue Composition API的风格&#xff0c;使用了更加现代化的语法和概念。相比之下&#xff0c;Vuex的API设计较为传统&#xff0c;使用了基于对象和字符串的方式来定义和访问状态。 TypeScript支持&#xff…...

普林斯顿算法讲义(二)

原文&#xff1a;普林斯顿大学算法课程 译者&#xff1a;飞龙 协议&#xff1a;CC BY-NC-SA 4.0 2.2 归并排序 原文&#xff1a;algs4.cs.princeton.edu/22mergesort 译者&#xff1a;飞龙 协议&#xff1a;CC BY-NC-SA 4.0 我们在本节中考虑的算法基于一种简单的操作&#xff…...

JVM 面试——G1和ZGC的区别

ZGC是一款JDK 11中新加入的具有实验性质的低延迟垃圾收集器ZGC的目标主要有4个 支持TB量级的堆。我们生产环境的硬盘还没有上TB呢&#xff0c;这应该可以满足未来十年内&#xff0c;所有JAVA应用的需求了吧。最大GC停顿时间不超10ms。目前一般线上环境运行良好的JAVA应用Minor …...

当“新质生产力”遇上“CAE仿真”,将激起什么样的火花?

在刚刚闭幕的全国两会上&#xff0c;新质生产力无疑是最为“滚烫”的热词。发展新质生产力是推动高质量发展的内在要求和重要着力点&#xff0c;此次更被列为2024年政府重点任务的第一条。 新质生产力是创新起主导作用&#xff0c;摆脱传统经济增长方式、生产力发展路径&#…...

使用 ChatGPT 写高考作文

写作文&#xff0c;很简单&#xff0c;但写一篇好的作文&#xff0c;是非常有难度的。 想要写一篇高分作文&#xff0c;需要对作文题目有正确的理解&#xff0c;需要展现独到的观点和深入的思考&#xff0c;需要具备清晰的逻辑结构&#xff0c;需要准确而得体的语言表达。 正…...

mac输入su命令报错如何重置密码

diannao1xiejiandeMacBook-Air ~ % su Password: su: Sorry输入 sudo passwd 命令重置密码即可。...

KY211 特殊排序

描述&#xff1a; 输入一系列整数&#xff0c;将其中最大的数挑出(如果有多个&#xff0c;则挑出一个即可)&#xff0c;并将剩下的数进行排序&#xff0c;如果无剩余的数&#xff0c;则输出-1。 输入描述&#xff1a; 输入第一行包括1个整数N&#xff0c;1<N<1000&#x…...

设计模式八:观察者模式

文章目录 1、观察者模式2、示例3、spring中的观察者模式3.1 spring观察者模式的使用3.2 spring观察者模式原理解析 1、观察者模式 观察者模式&#xff08;Observer Design Pattern&#xff09;,也叫做发布订阅模式&#xff08;Publish-Subscribe Design Pattern&#xff09;、模…...

黑马程序员java部分笔记(持续更新)十点二:封装

面向对象的三大特征&#xff1a;封装&#xff0c;继承&#xff0c;多态 告诉我们正确的属性与方法 例1&#xff1a;需求&#xff1a;定义一个类&#xff1a;人 属性&#xff1a;姓名&#xff0c;年龄 行为&#xff1a;吃饭&#xff0c;睡觉 代码&#xff1a; public class Pe…...

ChatGPT-Next-Web SSRF漏洞+XSS漏洞复现(CVE-2023-49785)

0x01 产品简介 ChatGPT-Next-Web 是一种基于 OpenAI 的 GPT-3.5 、GPT-4.0语言模型的产品。它是设计用于 Web 环境中的聊天机器人,旨在为用户提供自然语言交互和智能对话的能力。 0x02 漏洞概述 2024年3月,互联网上披露CVE-2023-49785 ChatGPT-Next-Web SSRF/XSS 漏洞,未经…...

【小黑嵌入式系统第十九课】结课总结(三)——操作系统部分(RTOSμC/OS-Ⅲ程序设计基础(任务函数时间临界区通信))

上一课&#xff1a; 【小黑嵌入式系统第十八课】结课总结&#xff08;二&#xff09;——软件部分&#xff08;系统架构&调试&测试&运行&系统软件设计&#xff09; 前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0…...

C# Onnx C2PNet 图像去雾 室内场景

目录 介绍 效果 模型信息 项目 代码 下载 C# Onnx C2PNet 图像去雾 室内场景 介绍 github地址&#xff1a;GitHub - YuZheng9/C2PNet: [CVPR 2023] Curricular Contrastive Regularization for Physics-aware Single Image Dehazing [CVPR 2023] Curricular Contrasti…...

工作中Git如何切换远程仓库地址

工作中Git如何切换远程仓库地址 部门之前的仓库不用了&#xff0c;重新建了一个仓库&#xff0c;但是上传代码还是上传到了之前的仓库里面了&#xff0c;所以得进行修改&#xff0c;下面将修改地址的方法进行操作。 方法一、直接修改远程仓库地址 查看当前远程仓库地址 git …...

香港理工大学主办!2024年第八届电力能源系统与应用国际会议(ICoPESA 2024)即将召开!

2024年第八届电力能源系统与应用国际会议&#xff08;ICoPESA 2024&#xff09; 2024年6月24日-26日 中国香港 ICoPESA 2024-Hong Kong (icpesa.org)https://icpesa.org/index.html 会议组织单位 会议出版及检索&#xff1a; 会议录用并注册的论文将由IEEE出版&#xff0c;…...

【微服务-Nacos】Nacos集群的工作原理及集群间数据同步过程

上篇文章我们介绍了Nacos集群的搭建方法及步骤&#xff0c;下面我们来看一下Nacos集群的工作原理&#xff0c;一共有两部分&#xff1a;Leader节点选举及各节点数据同步。 1、Nacos集群中Leader节点是如何产生的 Nacos集群采用了Raft算法实现。它是一种比较简单的选举算法&am…...

C++_核心编程_多态案例二-制作饮品

#include <iostream> #include <string> using namespace std;/*制作饮品的大致流程为&#xff1a;煮水 - 冲泡 - 倒入杯中 - 加入辅料 利用多态技术实现本案例&#xff0c;提供抽象制作饮品基类&#xff0c;提供子类制作咖啡和茶叶*//*基类*/ class AbstractDr…...

Prompt Tuning、P-Tuning、Prefix Tuning的区别

一、Prompt Tuning、P-Tuning、Prefix Tuning的区别 1. Prompt Tuning(提示调优) 核心思想:固定预训练模型参数,仅学习额外的连续提示向量(通常是嵌入层的一部分)。实现方式:在输入文本前添加可训练的连续向量(软提示),模型只更新这些提示参数。优势:参数量少(仅提…...

golang循环变量捕获问题​​

在 Go 语言中&#xff0c;当在循环中启动协程&#xff08;goroutine&#xff09;时&#xff0c;如果在协程闭包中直接引用循环变量&#xff0c;可能会遇到一个常见的陷阱 - ​​循环变量捕获问题​​。让我详细解释一下&#xff1a; 问题背景 看这个代码片段&#xff1a; fo…...

从零实现富文本编辑器#5-编辑器选区模型的状态结构表达

先前我们总结了浏览器选区模型的交互策略&#xff0c;并且实现了基本的选区操作&#xff0c;还调研了自绘选区的实现。那么相对的&#xff0c;我们还需要设计编辑器的选区表达&#xff0c;也可以称为模型选区。编辑器中应用变更时的操作范围&#xff0c;就是以模型选区为基准来…...

Debian系统简介

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

多模态商品数据接口:融合图像、语音与文字的下一代商品详情体验

一、多模态商品数据接口的技术架构 &#xff08;一&#xff09;多模态数据融合引擎 跨模态语义对齐 通过Transformer架构实现图像、语音、文字的语义关联。例如&#xff0c;当用户上传一张“蓝色连衣裙”的图片时&#xff0c;接口可自动提取图像中的颜色&#xff08;RGB值&…...

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

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

unix/linux,sudo,其发展历程详细时间线、由来、历史背景

sudo 的诞生和演化,本身就是一部 Unix/Linux 系统管理哲学变迁的微缩史。来,让我们拨开时间的迷雾,一同探寻 sudo 那波澜壮阔(也颇为实用主义)的发展历程。 历史背景:su的时代与困境 ( 20 世纪 70 年代 - 80 年代初) 在 sudo 出现之前,Unix 系统管理员和需要特权操作的…...

WordPress插件:AI多语言写作与智能配图、免费AI模型、SEO文章生成

厌倦手动写WordPress文章&#xff1f;AI自动生成&#xff0c;效率提升10倍&#xff01; 支持多语言、自动配图、定时发布&#xff0c;让内容创作更轻松&#xff01; AI内容生成 → 不想每天写文章&#xff1f;AI一键生成高质量内容&#xff01;多语言支持 → 跨境电商必备&am…...

JDK 17 新特性

#JDK 17 新特性 /**************** 文本块 *****************/ python/scala中早就支持&#xff0c;不稀奇 String json “”" { “name”: “Java”, “version”: 17 } “”"; /**************** Switch 语句 -> 表达式 *****************/ 挺好的&#xff…...