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

java学习--集合(大写四.4)

4.collection子接口:List

在这里插入图片描述

4.1 List接口存储数据特点

List接口中存储数据的特点:用于存储有序\可以重复的数据.
可以使用List替代数组,动态数组

4.2List接口常用方法

4.2.1、第一波: Collection中声明的15个方法

4.2.2、第二波:因为List是有序的,进而就会有序号、索引,就会针对索引操作的一些方法)

1)插入元素
①add(int index,Object ele):在index位置插入ele元素
②boolean addAll(int index,Collection eles):从index位置开始将eles中的所有元素添加进来
2)获取元素
①Object get(int index):获取指定index位置的元素
②List subList(int fromIndex,int toIndex):返回从fromIndex到toIndex位置的子集合
3)获取元素索引
①int indexOf(Object obj):返回Obj在集合中首次出现的位置
②int LastIndexOf(Object obj):返回Obj在集合中末次出现的位置
4)删除和替换索引
①Object remove(int index):返回Obj在集合中首次出现的位置
②Object set(int index,Object ele):返回Obj在集合中末次出现的位置

4.2.3、小结

1)增
①add(Object obj):添加一个元素
②addAll(Collection coll):将另一个集合元素添加到当前集合中
2)删
①remove(Object obj):删指定的元素
②remove(int index):以索引方式进行删除
3)改
①set(int index,Object ele):将指定位置改成新元素
4)查
①get(int index)

5)插

①add(int index,Object ele)在指定位置插入一个元素
②addAll(int index,Collection else)在指定位置插入多个元素

6)遍历

①iterator():使用迭代器进行遍历
②iterator():增强for循环
③一般的for循环

7)长度

①size()

4.3List接口主要实现类及其特点

java.util.Collection:存储一个一个的数据
子接口:List:存储有序可重复的数据(动态的数组)
主要实现类:ArrayList、LinkList、Vector

4.3.1ArrayList(List主要实现类)线程不安全,效率高,底层使用Object[]类型数组,在添加、查找数据效率较高,在插入、删除时效率较低

4.3.2 LinkList:底层使用双向链表的方式进行存储,在插入、删除时效率较高,在添加、查找数据效率较低,在对集合的数据频繁的插入、删除建议使用此类

4.3.3 Vector(List古老实现类)线程安全,效率低,底层使用Object[]类型数组

4.4练习

4.4.1案例:键盘录入学生信息,保存到集合List中。

(1) 定义学生类,属性为姓名、年龄,提供必要的getter、setter方法,构造器,toString(),equals()方法。

(2) 使用ArrayList集合,保存录入的多个学生对象。

(3) 循环录入的方式,1:继续录入,0:结束录入。

(4) 录入结束后,用foreach遍历集合。

在这里插入图片描述


```java```java
package com.zhou.list.exer1;import java.util.ArrayList;
import java.util.Scanner;public class StudentTest {public static void main(String[] args) {Scanner sc = new Scanner(System.in);ArrayList list = new ArrayList();System.out.println("请录入学生的信息");while (true) {System.out.println("1:继续录入,0:结束录入");int seletcion = sc.nextInt();if (seletcion == 0) {break;}System.out.println("请输入学生姓名:");String name = sc.next();System.out.println("请输入学生年龄:");int age = sc.nextInt();Student s = new Student(name, age);list.add(s);}for (Object s : list) {System.out.println(s);}sc.close();}}

4.4.2案例:定义方法public static int listTest(Collection list,String s)统计集合中指定元素出现的次数

(1) 创建集合,集合存放随机生成的30个小写字母

(2) 用listTest统计,a、b、c、x元素的出现次数

(3) 效果如下

在这里插入图片描述

package com.zhou.list.exer2;import java.util.ArrayList;
import java.util.Collection;public class ListTest {public static void main(String[] args) {ArrayList list = new ArrayList();for (int i = 0; i <30 ; i++) {list.add((char)(Math.random()*(122-97+1)+97)+"");}int acount = listTest(list, "a");int bcount = listTest(list, "b");int ccount = listTest(list, "c");int xcount = listTest(list, "x");System.out.println("a:"+acount);System.out.println("b:"+bcount);System.out.println("c:"+ccount);System.out.println("x:"+xcount);}public static int listTest(Collection list, String s){int count=0;for (Object obj:list) {if (s.equals(obj)){count++;}}return  count;}

4.4.3案例:KTV点歌系统

【说明】
使用ArrayList集合,实现编写一个模拟KTV点歌系统的程序。在程序中,
指令1代表添加歌曲,
指令2代表将所选歌曲置顶,
指令3代表将所选歌曲提前一位,
指令4代表退出该系统。

要求根据用户输入的指令完成相关的操作。

【提示】
(1) 显式界面如下:
System.out.println(“-------------欢迎来到点歌系统------------”);
System.out.println(“1.添加歌曲至列表”);
System.out.println(“2.将歌曲置顶”);
System.out.println(“3.将歌曲前移一位”);
System.out.println(“4.退出”);

(2) 程序中需要创建一个集合作为歌曲列表,并向其添加一部分歌曲
(3) 通过ArrayList集合定义的方法操作歌曲列表
(4) 本题目使用LinkedList 如何?

package com.zhou.list.exer3.model;import java.util.ArrayList;
import java.util.Scanner;
public class KTVByArrayList {private static ArrayList musicList = new ArrayList();// 创建歌曲列表private static Scanner sc = new Scanner(System.in);public static void main(String[] args) {addMusicList();// 添加一部分歌曲至歌曲列表boolean  flag=true;while (flag) {System.out.println("当前歌曲列表"+musicList);System.out.println("-------------欢迎来到点歌系统------------");System.out.println("1.添加歌曲至列表");System.out.println("2.将歌曲置顶");System.out.println("3.将歌曲前移一位");System.out.println("4.退出");System.out.print("请输入操作序号:");int key = sc.nextInt();switch (key){case 1:addMusic();break;case 2:// 将歌曲置顶setTop();break;case 3:setBefore();break;case 4:System.out.println("====退出====");System.out.println("您已推出系统");flag=false;break;default:System.out.println("----------------------------------");System.out.println("功能选择有误,请输入正确的功能序号!");break;}}}private  static void addMusicList(){musicList.add("告白气球");musicList.add("稻香");musicList.add("听妈妈的话");musicList.add("晴天");musicList.add("一路向北");}private static void addMusic() {System.out.print("请输入要添加的歌曲名称:");String musicName = sc.next();// 获取键盘输入内容musicList.add(musicName);// 添加歌曲到列表的最后System.out.println("已添加歌曲:" + musicName);}private static void setTop() {System.out.print("请输入要置顶的歌曲名称:");String musicName = sc.next();int musicIndex = musicList.indexOf(musicName);if (musicIndex<0){System.out.println("当前列表中没有输入的歌曲!");}else if (musicIndex==0){System.out.println("当前歌曲已在最顶部!");}else {musicList.remove(musicName);musicList.add(0, musicName);// 将指定的歌曲放到第一位System.out.println("已将歌曲《" + musicName + "》置顶");}}private static void setBefore() {System.out.print("请输入要置前的歌曲名称:");String musicName = sc.next();int musicIndex = musicList.indexOf(musicName);if (musicIndex<0){System.out.println("当前列表中没有输入的歌曲!");}else if (musicIndex==0){System.out.println("当前歌曲已在最顶部!");}else{musicList.remove(musicName);musicList.add(musicIndex-1,musicName);System.out.println("已将歌曲《" + musicName + "》置前一位");}}}

4.5、List实现类源码分析

4.5.1ArrayList

4.5.1.1ArrayList的特点

实现了List接口,存储有序的、可以重复的数据
底层使用Object[]数组存储
线程不安全
在添加、查找数据效率较高,在插入、删除时效率较低

4.5.1.2ArrayList源码解析
1)jdk7版本:以jdk1.7.0_07为例

new

2)jdk8版本:以jdk1.8.0_271为例

4.5.2Vector

4.5.2.1Vector的特点

实现了List接口,存储有序的、可以重复的数据
底层使用Object[]数组存储
线程安全,效率低

4.5.2.2Vector源码解析(以jdk1.8.0_271为例)

4.5.3LinkedList

4.5.3.1LinkedList的特点

实现List接口,存储有序可以重复的数据
底层采用双向链表存储
添加、查找效率低,插入,删除效率高
线程不安全

4.5.3.2LinkedList源码解析(以jdk1.8.0_271为例)

相关文章:

java学习--集合(大写四.4)

4.collection子接口&#xff1a;List 4.1 List接口存储数据特点 List接口中存储数据的特点:用于存储有序\可以重复的数据. 可以使用List替代数组,动态数组 4.2List接口常用方法 4.2.1、第一波&#xff1a; Collection中声明的15个方法 4.2.2、第二波&#xff1a;因为List是…...

CSS3文本阴影、文本换行、文本溢出、文本修饰、文本描边的使用

1.文本阴影&#xff1a;text-shadow 2.文本换行&#xff1a; white-space&#xff1a;pre&#xff08;可以理解为按原文显示&#xff09; white-space&#xff1a;pre-wrap&#xff08;不会超出父容器&#xff09; 3.文本溢出 text-overflow&#xff1a;ellipsis一般配合文本…...

Python实现股票自动交易:步骤、要点与注意事项有哪些?

炒股自动化&#xff1a;申请官方API接口&#xff0c;散户也可以 python炒股自动化&#xff08;0&#xff09;&#xff0c;申请券商API接口 python炒股自动化&#xff08;1&#xff09;&#xff0c;量化交易接口区别 Python炒股自动化&#xff08;2&#xff09;&#xff1a;获取…...

闪存----

闪存是一种非易失性存储设备&#xff0c;用于在电子设备中存储数据。使用固态电子存储技术&#xff0c;不含运动部件&#xff0c;因此具有更高的耐久性和更快的访问速度。闪存能够永久的保存数据&#xff0c;即使在断电的情况下也不会丢失。 闪存的速度主要得益于 非机械结构、…...

Spring Boot论坛网站:安全特性与性能优化

4系统概要设计 4.1概述 本系统采用B/S结构(Browser/Server,浏览器/服务器结构)和基于Web服务两种模式&#xff0c;是一个适用于Internet环境下的模型结构。只要用户能连上Internet,便可以在任何时间、任何地点使用。系统工作原理图如图4-1所示&#xff1a; 图4-1系统工作原理…...

【MATLAB源码-第261期】基于matlab的帝企鹅优化算法(EPO)机器人栅格路径规划,输出做短路径图和适应度曲线

操作环境&#xff1a; MATLAB 2022a 1、算法描述 帝企鹅优化算法&#xff08;Emperor Penguin Optimizer&#xff0c;简称EPO&#xff09;是一种基于自然现象的优化算法&#xff0c;灵感来自于帝企鹅在南极极寒环境中的生活习性。帝企鹅是一种群居动物&#xff0c;生活在极端…...

Spring Boot 核心理解-profile

在 Spring Boot 中&#xff0c;application.properties 和 application.yml 是用来管理应用程序配置的主要文件。为了方便在不同的环境&#xff08;如 dev、test、prod&#xff09;下进行配置管理&#xff0c;Spring Boot 提供了 Profile 的概念&#xff0c;这使得我们可以针对…...

docker清理未使用的 Docker 资源

docker system prune --all --forcedocker system prune --all --force 是一个 Docker 命令&#xff0c;用于清理未使用的 Docker 资源。具体含义如下&#xff1a; docker system prune&#xff1a;这个命令会清理所有未使用的 Docker 资源&#xff0c;包括未使用的容器、网络…...

新网虚拟主机wordpress伪静态规则

先在WordPress安装目录下的创建.htaccess 文件&#xff0c;并在该文件中添加以下规则&#xff1a; BEGIN WordPress <IfModule mod_rewrite.c> RewriteEngine On RewriteBase / RewriteRule ^index.php$ [L] RewriteCond %{REQUEST_FILENAME} !f RewriteCond %{REQUEST_…...

Spring Cloud LoadBalancer

什么是负载均衡&#xff1f; 如果一个服务对应多个实例&#xff0c;我们需要把流量合理的分配给多个实例&#xff1b;当服务流量增⼤时, 通常会采⽤增加机器的⽅式进⾏扩容, 负载均衡就是⽤来在多个机器或者其他资源&#xff0c;中, 按照⼀定的规则合理分配负载. 服务端负载…...

面向对象与设计模式第二课:设计模式实战

第三章&#xff1a;面向对象与设计模式 第二课&#xff1a;设计模式实战 设计模式是软件工程中的一项重要实践&#xff0c;它为解决常见的设计问题提供了经过验证的解决方案。本课将深入探讨几种常见的设计模式&#xff0c;并通过实际案例分析其在项目中的应用。 1. 每种设计…...

非科班出身如何转行程序员?

非科班出身是指那些大学专业为非计算机相关专业的人群&#xff0c;多数人对于计算机基础了解比较少&#xff0c;甚至零基础。这部分人群中有相当多一部分处于对于编程的兴趣和外界了解的印象想转行成为一名程序员。 非科班出身与计算机科班出身相比有着天然的劣势&#xff0c;在…...

多台NFS客户端访问一台nfs服务器

目录 1.安装服务 2.创建用户和用户组 3.写配置文件 (服务端) 4.创建/share目录 5.挂载服务&#xff08;在两个服务端上&#xff09; 6.测试 1.安装服务 yum -y install rpcbind nfs 2.创建用户和用户组 useradd -u 555 nfs-share groupadd -u 556 nfs-share …...

【STM32 HAL库】MPU6050姿态解算 卡尔曼滤波

【STM32 HAL库】MPU6050姿态解算 卡尔曼滤波 前言MPU6050寄存器代码详解mpu6050.cmpu6050.h 使用说明 前言 本篇文章基于卡尔曼滤波的原理详解与公式推导&#xff0c;来详细的解释下如何使用卡尔曼滤波来解算MPU6050的姿态 参考资料&#xff1a;Github_mpu6050 MPU6050寄存器…...

Linux系统——ssh远程连接

Linux系统——ssh远程连接 一、ssh协议介绍1、远程连接协议2、ssh服务基本操作3、ssh常用操作 二、ssh加密1、加密算法类型2、对称加密算法3、非对称加密算法 三、免密ssh的配置1、ssh认证方式2、配置免密ssh3、ssh-copy-id做了什么&#xff1f; 四、ssh服务配置 一、ssh协议介…...

python学习-第一个小游戏(vscode环境)

学习小甲鱼的视频&#xff0c;写了一个小游戏&#xff0c;vscode环境 运行结果 源码地址&#xff1a; python小游戏-猜数字源码...

程序设计基础I-单元测试2(机测)

7-1 sdut-C语言实验-AB for Input-Output Practice (不确定次数循环) Your task is to Calculate a b. Too easy?! Of course! I specially designed the problem for all beginners. You must have found that some problems have the same titles with this one, yes, a…...

Claude 3.5深夜觉醒,学会模仿人类用电脑,力压GPT-4o

1.Claude 3.5深夜重磅更新 Anthropic AI深夜发布了备受期待的Claude 3.5系列更新&#xff0c;包括了全新升级的Claude 3.5 Sonnet和首发的Claude 3.5 Haiku。 虽然备受期待的Opus版本尚未公布&#xff0c;但新版本的Sonnet在推理能力上取得了显著的进步&#xff0c;超越了Open…...

PuTTY

PuTTY 是一个免费的开源终端仿真器和串口终端&#xff0c;广泛用于在 Windows 系统上进行 SSH、Telnet 和 Rlogin 等网络协议的连接。 它允许用户通过安全的方式访问远程计算机&#xff0c;常用于管理服务器和网络设备。 PuTTY 也支持公钥身份验证和端口转发等功能&#xff0c;…...

2024软件测试面试秘籍(含答案+文档)

&#x1f345; 点击文末小卡片&#xff0c;免费获取软件测试全套资料&#xff0c;资料在手&#xff0c;涨薪更快 Part1 1、你的测试职业发展是什么&#xff1f; 测试经验越多&#xff0c;测试能力越高。所以我的职业发展是需要时间积累的&#xff0c;一步步向着高级测试工程师…...

告别Python环境依赖!用PyInstaller打包Tkinter/Selenium程序的最佳实践

告别Python环境依赖&#xff01;用PyInstaller打包Tkinter/Selenium程序的最佳实践 你是否遇到过这样的尴尬场景&#xff1f;精心开发的Python程序在本地运行完美&#xff0c;但分享给同事或客户时&#xff0c;对方却因为缺少Python环境或依赖库而无法使用。尤其当程序涉及图形…...

从硬件迷宫到macOS殿堂:OpCore Simplify如何重塑黑苹果配置体验

从硬件迷宫到macOS殿堂&#xff1a;OpCore Simplify如何重塑黑苹果配置体验 【免费下载链接】OpCore-Simplify A tool designed to simplify the creation of OpenCore EFI 项目地址: https://gitcode.com/GitHub_Trending/op/OpCore-Simplify 对于许多技术爱好者来说&a…...

别再死记硬背公式了!Cesium中Entity姿态(HPR)的获取与设置,一个例子讲透

Cesium中Entity姿态控制的本质&#xff1a;从HPR到四元数的思维跃迁 当你第一次在Cesium中加载一个3D模型&#xff0c;却发现它头朝下或者背对镜头时&#xff0c;那种挫败感我深有体会。传统教程往往直接扔给你一堆转换公式&#xff0c;却很少解释为什么需要这些看似复杂的数学…...

别再死记硬背了!用Python脚本+Modbus Poll工具,5分钟搞懂Modbus功能码怎么用

用PythonModbus Poll实战&#xff1a;5分钟解锁功能码核心逻辑 第一次接触Modbus协议时&#xff0c;那些晦涩的功能码总让我头疼——01H、03H、05H这些十六进制代码就像天书&#xff0c;文档里的理论描述看完就忘。直到我发现用Python脚本配合Modbus Poll工具进行实操测试&…...

ElasticSearch集群搭建步骤

文章目录一、前言二、使用 RPM 安装 Elasticsearch导入 Elasticsearch GPG 密钥从 RPM 存储库安装三、设置基本安全性生成证书使用TLS加密节点间通信四、为 Elasticsearch 加密 HTTP 客户端通信五、配置集群编辑 elasticsearch.yml&#xff08;通用配置&#xff09;关键性能参数…...

MacOS开发环境配置:OpenClaw+GLM-4.7-Flash联调指南

MacOS开发环境配置&#xff1a;OpenClawGLM-4.7-Flash联调指南 1. 为什么选择这个组合&#xff1f; 去年我在做一个自动化文档处理项目时&#xff0c;发现市面上的AI工具要么隐私性不足&#xff0c;要么灵活性太差。直到偶然接触到OpenClaw这个开源框架&#xff0c;才找到了理…...

7大应用场景:如何用计算机视觉技术彻底改变足球比赛分析?

7大应用场景&#xff1a;如何用计算机视觉技术彻底改变足球比赛分析&#xff1f; 【免费下载链接】sports computer vision and sports 项目地址: https://gitcode.com/gh_mirrors/sp/sports 在当今数字化体育时代&#xff0c;足球场精准定位技术正以前所未有的方式改变…...

java自动带注释

...

实战复盘-Redis连接数爆满引发的生产事故与优化策略

1. 事故背景&#xff1a;一场由促销活动引发的Redis雪崩 那天凌晨三点&#xff0c;我被一阵急促的电话铃声惊醒。电话那头是值班同事焦急的声音&#xff1a;"所有商品页面都打不开了&#xff0c;订单系统也瘫痪了&#xff01;"我瞬间清醒&#xff0c;抓起电脑就开始…...

Doris从入门到上天系列第六篇:Doris中修改表的操作

一&#xff1a;修改表使用 ALTER TABLE 命令可以对表进行修改&#xff0c;包括 partition 、rollup、schemachange、rename 和 index 五种。语法&#xff1a;ALTER TABLE [database.]table alter_clause1[, alter_clause2, ...];alter_clause 分为 partition 、rollup、schema …...