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、你的测试职业发展是什么? 测试经验越多,测试能力越高。所以我的职业发展是需要时间积累的,一步步向着高级测试工程师…...
23-Oracle 23 ai 区块链表(Blockchain Table)
小伙伴有没有在金融强合规的领域中遇见,必须要保持数据不可变,管理员都无法修改和留痕的要求。比如医疗的电子病历中,影像检查检验结果不可篡改行的,药品追溯过程中数据只可插入无法删除的特性需求;登录日志、修改日志…...
uniapp微信小程序视频实时流+pc端预览方案
方案类型技术实现是否免费优点缺点适用场景延迟范围开发复杂度WebSocket图片帧定时拍照Base64传输✅ 完全免费无需服务器 纯前端实现高延迟高流量 帧率极低个人demo测试 超低频监控500ms-2s⭐⭐RTMP推流TRTC/即构SDK推流❌ 付费方案 (部分有免费额度&#x…...
【JavaSE】绘图与事件入门学习笔记
-Java绘图坐标体系 坐标体系-介绍 坐标原点位于左上角,以像素为单位。 在Java坐标系中,第一个是x坐标,表示当前位置为水平方向,距离坐标原点x个像素;第二个是y坐标,表示当前位置为垂直方向,距离坐标原点y个像素。 坐标体系-像素 …...
大数据学习(132)-HIve数据分析
🍋🍋大数据学习🍋🍋 🔥系列专栏: 👑哲学语录: 用力所能及,改变世界。 💖如果觉得博主的文章还不错的话,请点赞👍收藏⭐️留言Ǵ…...
使用 SymPy 进行向量和矩阵的高级操作
在科学计算和工程领域,向量和矩阵操作是解决问题的核心技能之一。Python 的 SymPy 库提供了强大的符号计算功能,能够高效地处理向量和矩阵的各种操作。本文将深入探讨如何使用 SymPy 进行向量和矩阵的创建、合并以及维度拓展等操作,并通过具体…...
docker 部署发现spring.profiles.active 问题
报错: org.springframework.boot.context.config.InvalidConfigDataPropertyException: Property spring.profiles.active imported from location class path resource [application-test.yml] is invalid in a profile specific resource [origin: class path re…...
return this;返回的是谁
一个审批系统的示例来演示责任链模式的实现。假设公司需要处理不同金额的采购申请,不同级别的经理有不同的审批权限: // 抽象处理者:审批者 abstract class Approver {protected Approver successor; // 下一个处理者// 设置下一个处理者pub…...
【电力电子】基于STM32F103C8T6单片机双极性SPWM逆变(硬件篇)
本项目是基于 STM32F103C8T6 微控制器的 SPWM(正弦脉宽调制)电源模块,能够生成可调频率和幅值的正弦波交流电源输出。该项目适用于逆变器、UPS电源、变频器等应用场景。 供电电源 输入电压采集 上图为本设计的电源电路,图中 D1 为二极管, 其目的是防止正负极电源反接, …...
JavaScript基础-API 和 Web API
在学习JavaScript的过程中,理解API(应用程序接口)和Web API的概念及其应用是非常重要的。这些工具极大地扩展了JavaScript的功能,使得开发者能够创建出功能丰富、交互性强的Web应用程序。本文将深入探讨JavaScript中的API与Web AP…...
MySQL 部分重点知识篇
一、数据库对象 1. 主键 定义 :主键是用于唯一标识表中每一行记录的字段或字段组合。它具有唯一性和非空性特点。 作用 :确保数据的完整性,便于数据的查询和管理。 示例 :在学生信息表中,学号可以作为主键ÿ…...
