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子接口:List 4.1 List接口存储数据特点 List接口中存储数据的特点:用于存储有序\可以重复的数据. 可以使用List替代数组,动态数组 4.2List接口常用方法 4.2.1、第一波: Collection中声明的15个方法 4.2.2、第二波:因为List是…...
CSS3文本阴影、文本换行、文本溢出、文本修饰、文本描边的使用
1.文本阴影:text-shadow 2.文本换行: white-space:pre(可以理解为按原文显示) white-space:pre-wrap(不会超出父容器) 3.文本溢出 text-overflow:ellipsis一般配合文本…...
Python实现股票自动交易:步骤、要点与注意事项有哪些?
炒股自动化:申请官方API接口,散户也可以 python炒股自动化(0),申请券商API接口 python炒股自动化(1),量化交易接口区别 Python炒股自动化(2):获取…...
闪存----
闪存是一种非易失性存储设备,用于在电子设备中存储数据。使用固态电子存储技术,不含运动部件,因此具有更高的耐久性和更快的访问速度。闪存能够永久的保存数据,即使在断电的情况下也不会丢失。 闪存的速度主要得益于 非机械结构、…...
Spring Boot论坛网站:安全特性与性能优化
4系统概要设计 4.1概述 本系统采用B/S结构(Browser/Server,浏览器/服务器结构)和基于Web服务两种模式,是一个适用于Internet环境下的模型结构。只要用户能连上Internet,便可以在任何时间、任何地点使用。系统工作原理图如图4-1所示: 图4-1系统工作原理…...
【MATLAB源码-第261期】基于matlab的帝企鹅优化算法(EPO)机器人栅格路径规划,输出做短路径图和适应度曲线
操作环境: MATLAB 2022a 1、算法描述 帝企鹅优化算法(Emperor Penguin Optimizer,简称EPO)是一种基于自然现象的优化算法,灵感来自于帝企鹅在南极极寒环境中的生活习性。帝企鹅是一种群居动物,生活在极端…...
Spring Boot 核心理解-profile
在 Spring Boot 中,application.properties 和 application.yml 是用来管理应用程序配置的主要文件。为了方便在不同的环境(如 dev、test、prod)下进行配置管理,Spring Boot 提供了 Profile 的概念,这使得我们可以针对…...
docker清理未使用的 Docker 资源
docker system prune --all --forcedocker system prune --all --force 是一个 Docker 命令,用于清理未使用的 Docker 资源。具体含义如下: docker system prune:这个命令会清理所有未使用的 Docker 资源,包括未使用的容器、网络…...
新网虚拟主机wordpress伪静态规则
先在WordPress安装目录下的创建.htaccess 文件,并在该文件中添加以下规则: BEGIN WordPress <IfModule mod_rewrite.c> RewriteEngine On RewriteBase / RewriteRule ^index.php$ [L] RewriteCond %{REQUEST_FILENAME} !f RewriteCond %{REQUEST_…...
Spring Cloud LoadBalancer
什么是负载均衡? 如果一个服务对应多个实例,我们需要把流量合理的分配给多个实例;当服务流量增⼤时, 通常会采⽤增加机器的⽅式进⾏扩容, 负载均衡就是⽤来在多个机器或者其他资源,中, 按照⼀定的规则合理分配负载. 服务端负载…...
面向对象与设计模式第二课:设计模式实战
第三章:面向对象与设计模式 第二课:设计模式实战 设计模式是软件工程中的一项重要实践,它为解决常见的设计问题提供了经过验证的解决方案。本课将深入探讨几种常见的设计模式,并通过实际案例分析其在项目中的应用。 1. 每种设计…...
非科班出身如何转行程序员?
非科班出身是指那些大学专业为非计算机相关专业的人群,多数人对于计算机基础了解比较少,甚至零基础。这部分人群中有相当多一部分处于对于编程的兴趣和外界了解的印象想转行成为一名程序员。 非科班出身与计算机科班出身相比有着天然的劣势,在…...
多台NFS客户端访问一台nfs服务器
目录 1.安装服务 2.创建用户和用户组 3.写配置文件 (服务端) 4.创建/share目录 5.挂载服务(在两个服务端上) 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 使用说明 前言 本篇文章基于卡尔曼滤波的原理详解与公式推导,来详细的解释下如何使用卡尔曼滤波来解算MPU6050的姿态 参考资料: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做了什么? 四、ssh服务配置 一、ssh协议介…...
python学习-第一个小游戏(vscode环境)
学习小甲鱼的视频,写了一个小游戏,vscode环境 运行结果 源码地址: 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系列更新,包括了全新升级的Claude 3.5 Sonnet和首发的Claude 3.5 Haiku。 虽然备受期待的Opus版本尚未公布,但新版本的Sonnet在推理能力上取得了显著的进步,超越了Open…...
PuTTY
PuTTY 是一个免费的开源终端仿真器和串口终端,广泛用于在 Windows 系统上进行 SSH、Telnet 和 Rlogin 等网络协议的连接。 它允许用户通过安全的方式访问远程计算机,常用于管理服务器和网络设备。 PuTTY 也支持公钥身份验证和端口转发等功能,…...
2024软件测试面试秘籍(含答案+文档)
🍅 点击文末小卡片,免费获取软件测试全套资料,资料在手,涨薪更快 Part1 1、你的测试职业发展是什么? 测试经验越多,测试能力越高。所以我的职业发展是需要时间积累的,一步步向着高级测试工程师…...
AI-调查研究-01-正念冥想有用吗?对健康的影响及科学指南
点一下关注吧!!!非常感谢!!持续更新!!! 🚀 AI篇持续更新中!(长期更新) 目前2025年06月05日更新到: AI炼丹日志-28 - Aud…...
XCTF-web-easyupload
试了试php,php7,pht,phtml等,都没有用 尝试.user.ini 抓包修改将.user.ini修改为jpg图片 在上传一个123.jpg 用蚁剑连接,得到flag...
在鸿蒙HarmonyOS 5中实现抖音风格的点赞功能
下面我将详细介绍如何使用HarmonyOS SDK在HarmonyOS 5中实现类似抖音的点赞功能,包括动画效果、数据同步和交互优化。 1. 基础点赞功能实现 1.1 创建数据模型 // VideoModel.ets export class VideoModel {id: string "";title: string ""…...
8k长序列建模,蛋白质语言模型Prot42仅利用目标蛋白序列即可生成高亲和力结合剂
蛋白质结合剂(如抗体、抑制肽)在疾病诊断、成像分析及靶向药物递送等关键场景中发挥着不可替代的作用。传统上,高特异性蛋白质结合剂的开发高度依赖噬菌体展示、定向进化等实验技术,但这类方法普遍面临资源消耗巨大、研发周期冗长…...
ArcGIS Pro制作水平横向图例+多级标注
今天介绍下载ArcGIS Pro中如何设置水平横向图例。 之前我们介绍了ArcGIS的横向图例制作:ArcGIS横向、多列图例、顺序重排、符号居中、批量更改图例符号等等(ArcGIS出图图例8大技巧),那这次我们看看ArcGIS Pro如何更加快捷的操作。…...
AirSim/Cosys-AirSim 游戏开发(四)外部固定位置监控相机
这个博客介绍了如何通过 settings.json 文件添加一个无人机外的 固定位置监控相机,因为在使用过程中发现 Airsim 对外部监控相机的描述模糊,而 Cosys-Airsim 在官方文档中没有提供外部监控相机设置,最后在源码示例中找到了,所以感…...
C#学习第29天:表达式树(Expression Trees)
目录 什么是表达式树? 核心概念 1.表达式树的构建 2. 表达式树与Lambda表达式 3.解析和访问表达式树 4.动态条件查询 表达式树的优势 1.动态构建查询 2.LINQ 提供程序支持: 3.性能优化 4.元数据处理 5.代码转换和重写 适用场景 代码复杂性…...
华为OD机试-最短木板长度-二分法(A卷,100分)
此题是一个最大化最小值的典型例题, 因为搜索范围是有界的,上界最大木板长度补充的全部木料长度,下界最小木板长度; 即left0,right10^6; 我们可以设置一个候选值x(mid),将木板的长度全部都补充到x,如果成功…...
0x-3-Oracle 23 ai-sqlcl 25.1 集成安装-配置和优化
是不是受够了安装了oracle database之后sqlplus的简陋,无法删除无法上下翻页的苦恼。 可以安装readline和rlwrap插件的话,配置.bahs_profile后也能解决上下翻页这些,但是很多生产环境无法安装rpm包。 oracle提供了sqlcl免费许可,…...
C++实现分布式网络通信框架RPC(2)——rpc发布端
有了上篇文章的项目的基本知识的了解,现在我们就开始构建项目。 目录 一、构建工程目录 二、本地服务发布成RPC服务 2.1理解RPC发布 2.2实现 三、Mprpc框架的基础类设计 3.1框架的初始化类 MprpcApplication 代码实现 3.2读取配置文件类 MprpcConfig 代码实现…...
