JavaSE学习day9 集合(基础班结束)
1.ArrayList
集合和数组的优势对比:
-
长度可变
-
添加数据的时候不需要考虑索引,默认将数据添加到末尾
-
不能存基本数据类型。只能通过包装。
1.1ArrayList类概述
-
什么是集合
提供一种存储空间可变的存储模型,存储的数据容量可以发生改变
-
ArrayList集合的特点
底层是数组实现的,长度可以变化
-
泛型的使用
用于约束集合中存储元素的数据类型,这个通过下面就可以知道了。
1.2ArrayList类常用方法
1.2.1构造方法
| 方法名 | 说明 |
|---|---|
| public ArrayList() | 创建一个空的集合对象 |
如创建一个集合:

尖括号里限定数据类型,可以是引用类型,比如String、类等。但是不能是基本数据类型,第一行代码我们限定数据类型的时候发现代码已经报错了。今后在写集合的时候,创建对象都是用第三种写法。创建第一个对象的时候之所以出错是因为前面说了,集合不能存储基本数据类型。第二个对象是老程序员的写法。而第三个创建对象是JDK7版本后的新特性,是我们现在主流的写法。
1.2.2成员方法
| 方法名 | 说明 |
|---|---|
| public boolean remove(Object o) | 删除指定的元素,返回删除是否成功 |
| public E remove(int index) | 删除指定索引处的元素,返回被删除的元素 |
| public E set(int index,E element) | 修改指定索引处的元素,返回被修改的元素 |
| public E get(int index) | 返回指定索引处的元素 |
| public int size() | 返回集合中的元素的个数 |
| public boolean add(E e) | 将指定的元素追加到此集合的末尾 |
| public void add(int index,E element) | 在此集合中的指定位置插入指定的元素 |
1.2.3示例代码
public class ArrayListDemo02 {public static void main(String[] args) {//创建集合ArrayList<String> array = new ArrayList<String>();
//添加元素array.add("hello");array.add("world");array.add("java");
//public boolean remove(Object o):删除指定的元素,返回删除是否成功
// System.out.println(array.remove("world"));//true
// System.out.println(array.remove("javaee"));false
//public E remove(int index):删除指定索引处的元素,返回被删除的元素
// System.out.println(array.remove(1));
//IndexOutOfBoundsException
// System.out.println(array.remove(3));
//public E set(int index,E element):修改指定索引处的元素,返回被修改的元素
// System.out.println(array.set(1,"javaee"));
//IndexOutOfBoundsException
// System.out.println(array.set(3,"javaee"));
//public E get(int index):返回指定索引处的元素
// System.out.println(array.get(0));
// System.out.println(array.get(1));
// System.out.println(array.get(2));//System.out.println(array.get(3)); //?????? 自己测试
//public int size():返回集合中的元素的个数System.out.println(array.size());
//输出集合System.out.println("array:" + array);}
}
这个案例还是有必要说一下这几个方法:
public boolean add(E e)这个方法:
这个方法的返回值永远是true。我们转到该方法的定义下查看返回值:

public void add(int index,E element)这个方法:
比较特殊,这个方法没有返回值,但是如果出现索引不合法会抛出异常。
public boolean remove(Object o)这个方法:
它的返回值是true或者false,表示删除成功、删除失败。
public E remove(int index)这个方法:
如果删除成功,则返回该索引下的值,若删除失败,则抛出一个异常。
1.3ArrayList存储字符串并遍历
1.3.1案例需求
创建一个存储字符串的集合,存储3个字符串元素,使用程序实现在控制台遍历该集合
1.3.2代码实现
/*思路:1:创建集合对象2:往集合中添加字符串对象3:遍历集合,首先要能够获取到集合中的每一个元素,这个通过get(int index)方法实现4:遍历集合,其次要能够获取到集合的长度,这个通过size()方法实现5:遍历集合的通用格式*/
public class ArrayListTest01 {public static void main(String[] args) {//创建集合对象ArrayList<String> array = new ArrayList<String>();
//往集合中添加字符串对象array.add("刘正风");array.add("左冷禅");array.add("风清扬");
//遍历集合,其次要能够获取到集合的长度,这个通过size()方法实现
// System.out.println(array.size());
//遍历集合的通用格式for(int i=0; i<array.size(); i++) {String s = array.get(i);System.out.println(s);}}
}
1.4ArrayList存储学生对象并遍历
1.4.1案例需求
创建一个存储学生对象的集合,存储3个学生对象,使用程序实现在控制台遍历该集合
1.4.2代码实现
/*思路:1:定义学生类2:创建集合对象3:创建学生对象4:添加学生对象到集合中5:遍历集合,采用通用遍历格式实现*/
public class ArrayListTest02 {public static void main(String[] args) {//创建集合对象ArrayList<Student> array = new ArrayList<>();
//创建学生对象Student s1 = new Student("林青霞", 30);Student s2 = new Student("风清扬", 33);Student s3 = new Student("张曼玉", 18);
//添加学生对象到集合中array.add(s1);array.add(s2);array.add(s3);
//遍历集合,采用通用遍历格式实现for (int i = 0; i < array.size(); i++) {Student s = array.get(i);System.out.println(s.getName() + "," + s.getAge());}}
}
1.5ArrayList存储学生对象并遍历升级版
1.5.1案例需求
创建一个存储学生对象的集合,存储3个学生对象,使用程序实现在控制台遍历该集合
学生的姓名和年龄来自于键盘录入
1.5.2代码实现
public class ArrayListTest {public static void main(String[] args) {//1.创建集合对象ArrayList<Student> list = new ArrayList<>();//2.键盘录入数据并添加到集合中Scanner sc = new Scanner(System.in);for (int i = 1; i <= 3; i++) {//创建学生对象Student s = new Student();//键盘录入学生信息System.out.println("请输入第" + i + "个学生的姓名");String name = sc.next();System.out.println("请输入第" + i + "个学生的年龄");int age = sc.nextInt();//把学生信息赋值给学生对象s.setName(name);s.setAge(age);//把学生对象添加到集合当中list.add(s);}//遍历for (int i = 0; i < list.size(); i++) {Student stu = list.get(i);System.out.println(stu.getName() + ", " + stu.getAge());}}
}
1.6 查找用户是否存在
需求:
1,main方法中定义一个集合,存入三个用户对象。
用户属性为:id,username,password
2,要求:定义一个方法,根据id查找对应的学生信息。
如果存在,返回true
如果不存在,返回false
代码示例:
package com.itheima.test4;
import java.util.ArrayList;
public class ArrayListTest {public static void main(String[] args) {//1.创建集合ArrayList<User> list = new ArrayList<>();//2.添加用户对象User u1 = new User("heima001","zhangsan","123456");User u2 = new User("heima002","lisi","1234");User u3 = new User("heima003","wangwu","12345");//3.添加元素list.add(u1);list.add(u2);list.add(u3);//3.根据id查找是否存在//调方法//如果调用本类中的方法,直接写方法名就可以。//如果我要调用其他类中的方法,需要用对象去调用。boolean flag = contains(list, "heima004");System.out.println(flag);}
//1.我要干嘛? 判断id在集合中是否存在//2.需要什么? 集合 id//3.是否需要继续使用?需要//写在测试类中的方法,加static//写在javabean类中的方法,不加staticpublic static boolean contains(ArrayList<User> list, String id){for (int i = 0; i < list.size(); i++) {User u = list.get(i);String uid = u.getId();if(uid.equals(id)){return true;}}//当集合里面所有的元素全部比较完毕了//如果此时还不存在,才能返回falsereturn false;}
}
1.7 查找用户的索引
需求:
1,main方法中定义一个集合,存入三个用户对象。
用户属性为:id,username,password
2,要求:定义一个方法,根据id查找对应的学生信息。
如果存在,返回索引
如果不存在,返回-1
代码示例:
package com.itheima.test5;
import com.itheima.test4.User;
import java.util.ArrayList;
public class ArrayListTest {public static void main(String[] args) {//1.创建集合ArrayList<User> list = new ArrayList<>();//2.添加用户对象User u1 = new User("heima001","zhangsan","123456");User u2 = new User("heima002","lisi","1234");User u3 = new User("heima003","wangwu","12345");//3.添加元素list.add(u1);list.add(u2);list.add(u3);
//4.查询索引int index = findIndex(list, "heima004");System.out.println(index);
}
//1.我要干嘛?查询索引//2.需要什么?集合 id//3.是否需要继续使用 需要返回值public static int findIndex(ArrayList<User> list, String id){for (int i = 0; i < list.size(); i++) {User u = list.get(i);String uid = u.getId();if(uid.equals(id)){return i;}}//如果循环结束还没有找到return -1;}public static boolean contains(ArrayList<User> list, String id){int index = findIndex(list, id);if(index >= 0){return true;}else{return false;}// return findIndex(list, id) >= 0;}
}
再次强调一遍,在测试类中写方法要加上static关键字修饰,而在Javabean类中写的方法不用static修饰。而且这两个类里的方法调用格式也不同:
在测试类中,调用方法直接写本方法名就可以了
而在Javabean类中,需要用对象去调用。这些前面都讲过。
好了,基础班的学习到此结束,希望大家缓一缓脚步,把前面的知识点和代码多练练,多敲一敲代码。
相关文章:
JavaSE学习day9 集合(基础班结束)
1.ArrayList 集合和数组的优势对比: 长度可变 添加数据的时候不需要考虑索引,默认将数据添加到末尾 不能存基本数据类型。只能通过包装。 1.1ArrayList类概述 什么是集合 提供一种存储空间可变的存储模型,存储的数据容量可以发生改变 Ar…...
Python爬虫进阶 - win和linux下selenium使用代理
目录 Windows selenium配置 下载地址 Chrome Chromedriver 版本对应关系 实践测试 操作元素 浏览器操作 获取元素信息 鼠标操作 实战demo selenium添加代理 Linux selenium配置 检查服务器环境 下载安装第三方库(最简单版) 实践测试 代码…...
力扣-从不订购的客户
大家好,我是空空star,本篇带大家了解一道简单的力扣sql练习题。 文章目录前言一、题目:183. 从不订购的客户二、解题1.正确示范①提交SQL运行结果2.正确示范②提交SQL运行结果3.正确示范③提交SQL运行结果4.正确示范④提交SQL运行结果总结前言…...
速来!掘金数据时代2022年度隐私计算评选活动火热报名中!
开放隐私计算 开放隐私计算开放隐私计算OpenMPC是国内第一个且影响力最大的隐私计算开放社区。社区秉承开放共享的精神,专注于隐私计算行业的研究与布道。社区致力于隐私计算技术的传播,愿成为中国 “隐私计算最后一公里的服务区”。183篇原创内容公众号…...
Springboot @Test 给Controller接口 写 单元测试
前言 最近有小伙伴问到怎么给 controller的接口写单元测试。 单元测试是开发必不可少的一个环节。 既然有人问到了,那我觉得可能不止一个人不会,那就按照惯例,出手。 正文 内容: 主要是get 和 post 两种请求方式的接口 的 单元测…...
ISO 6721-1~12 ,塑料-电动机械性能的测定,2022更新
ISO 6721-1 :2019 Plastics - Determination of dynamic mechanical properties - Part 1: General principles ISO 6721-1 :2019 塑料 - 电动机械性能的测定. 第1部分:一般原理 ISO 6721-2 :2019 Plastics — Determination of dynamic mechanical properties — Part 2:…...
vue3.2中使用swiper缩略图轮播教程
介绍 在vue3 中使用 swiper 实现缩略图的轮播图效果,具体如下图所示: 使用 切换到项目终端 ,输入命令 npm install swiper --save , 进行安装在 main.js里,引入 swiper.css并使用,具体代码如下;import {createApp } from vue import App from ./App.vue import router…...
边玩边学,13个 Python 小游戏真有趣啊(含源码)
经常听到有朋友说,学习编程是一件非常枯燥无味的事情。其实,大家有没有认真想过,可能是我们的学习方法不对? 比方说,你有没有想过,可以通过打游戏来学编程? 今天我想跟大家分享几个Python小游…...
MySQL数据文件迁移(不关闭SELinux)
背景 日常实施中可能会出现在部署MySQL时未更改数据默认存储路径(默认:/var/lib/mysql),然而一般分配服务器的人只会给系统分区分配50G的空间,这导致后续空间不够用的情况,也就出现了需要迁移数据的问题。…...
uboot / linux添加/去除 版本号LOCALVERSION
背景 偶然的机会,在insmod驱动模块的时候,遇到报错: 查找原因,说是当前系统内核版本和模块编译使用版本不同! 使用如下命令查看当前系统内核版本: uname -r 使用modinfo命令(嵌入式设备没有此…...
2023北京养老展,北京养老展会,北京养老产业展览会
CBIAIE第十届中国(北京)国际老年产业博览会,8月28-30日在北京亦创国际会展中心举办; 预期效果:中国(北京)国际老年产业博览会China (Beijing) International Aged industry Expo(CB…...
华为OD机试 - 分糖果(Java) | 机试题算法思路 【2023】
使用说明 参加华为od机试,一定要注意不要完全背诵代码,需要理解之后模仿写出,通过率才会高。 华为 OD 清单查看地址:https://blog.csdn.net/hihell/category_12201821.html 华为OD详细说明:https://dream.blog.csdn.net/article/details/128980730 分糖果 小明从糖果…...
带你彻底了解浮点型数据的存储
🚀🚀🚀大家觉不错的话,就恳求大家点点关注,点点小爱心,指点指点🚀🚀🚀 目录 🐰浮点型在内存的存储 🤔提示:数据类型的存储范围 &a…...
【牛客刷题专栏】0x0C:JZ4 二维数组中的查找(C语言编程题)
前言 个人推荐在牛客网刷题(点击可以跳转),它登陆后会保存刷题记录进度,重新登录时写过的题目代码不会丢失。个人刷题练习系列专栏:个人CSDN牛客刷题专栏。 题目来自:牛客/题库 / 在线编程 / 剑指offer: 目录前言问题…...
「mysql是怎样运行的」第5章 盛放记录的大盒子---InnoDB数据页结构
「mysql是怎样运行的」第五章 盛放记录的大盒子—InnoDB数据页结构 文章目录「mysql是怎样运行的」第五章 盛放记录的大盒子---InnoDB数据页结构[toc]一、不同类型的页介绍二、数据页结构的快速浏览三、记录在页中的存储记录头信息的秘密四、Page Directory(页目录)五、Page He…...
模电中的负反馈
文章目录一、反馈是什么?二、负反馈对于放大性能的影响1.负反馈的作用三、正反馈总结– 一、反馈是什么? 反馈的定义:凡是将放大电路输出端信号(电压或电流)的一部分或者全部引回到输入端,与输入信号叠加…...
eclipse中整理左侧项目栏文件
💡在使用eclipse的过程中,随着项目越来越多,会使得项目管理变得困难,介绍一下eclipse中对于项目分类存放(Java Working Set)的解决方案。如果按照默认的方式查看项目列表是这种效果:⭕当创建使用小项目过多…...
IDEA性能优化设置(解决卡顿问题)修改内存
在我们日常使用IDEA进行开发时,可能会遇到许多卡顿的瞬间,明明我们的机器配置也不低啊?为什么就会一直卡顿呢? 原来这是因为IDEA软件在我们安装的时候就设置了默认的内存使用上限(通常很小),这就…...
Android ABI
概念 不同的 Android 设备使用不同的 CPU,而不同的 CPU 支持不同的指令集。CPU 与指令集的每种组合都有专属的应用二进制接口 (ABI)。ABI 包含以下信息: 可使用的 CPU 指令集(和扩展指令集)。运行时内存存储和加载的字节顺序。Android 始终是 little-endian。在应用和系统…...
决策树算法和CART决策树算法详细介绍及其原理详解
相关文章 K近邻算法和KD树详细介绍及其原理详解朴素贝叶斯算法和拉普拉斯平滑详细介绍及其原理详解决策树算法和CART决策树算法详细介绍及其原理详解 文章目录相关文章前言一、决策树算法二、CART决策树算法2.1 基尼系数2.2 CART决策树算法总结前言 今天给大家带来的主要内容包…...
国防科技大学计算机基础课程笔记02信息编码
1.机内码和国标码 国标码就是我们非常熟悉的这个GB2312,但是因为都是16进制,因此这个了16进制的数据既可以翻译成为这个机器码,也可以翻译成为这个国标码,所以这个时候很容易会出现这个歧义的情况; 因此,我们的这个国…...
Qt/C++开发监控GB28181系统/取流协议/同时支持udp/tcp被动/tcp主动
一、前言说明 在2011版本的gb28181协议中,拉取视频流只要求udp方式,从2016开始要求新增支持tcp被动和tcp主动两种方式,udp理论上会丢包的,所以实际使用过程可能会出现画面花屏的情况,而tcp肯定不丢包,起码…...
第25节 Node.js 断言测试
Node.js的assert模块主要用于编写程序的单元测试时使用,通过断言可以提早发现和排查出错误。 稳定性: 5 - 锁定 这个模块可用于应用的单元测试,通过 require(assert) 可以使用这个模块。 assert.fail(actual, expected, message, operator) 使用参数…...
laravel8+vue3.0+element-plus搭建方法
创建 laravel8 项目 composer create-project --prefer-dist laravel/laravel laravel8 8.* 安装 laravel/ui composer require laravel/ui 修改 package.json 文件 "devDependencies": {"vue/compiler-sfc": "^3.0.7","axios": …...
听写流程自动化实践,轻量级教育辅助
随着智能教育工具的发展,越来越多的传统学习方式正在被数字化、自动化所优化。听写作为语文、英语等学科中重要的基础训练形式,也迎来了更高效的解决方案。 这是一款轻量但功能强大的听写辅助工具。它是基于本地词库与可选在线语音引擎构建,…...
【分享】推荐一些办公小工具
1、PDF 在线转换 https://smallpdf.com/cn/pdf-tools 推荐理由:大部分的转换软件需要收费,要么功能不齐全,而开会员又用不了几次浪费钱,借用别人的又不安全。 这个网站它不需要登录或下载安装。而且提供的免费功能就能满足日常…...
【Go语言基础【12】】指针:声明、取地址、解引用
文章目录 零、概述:指针 vs. 引用(类比其他语言)一、指针基础概念二、指针声明与初始化三、指针操作符1. &:取地址(拿到内存地址)2. *:解引用(拿到值) 四、空指针&am…...
LangChain知识库管理后端接口:数据库操作详解—— 构建本地知识库系统的基础《二》
这段 Python 代码是一个完整的 知识库数据库操作模块,用于对本地知识库系统中的知识库进行增删改查(CRUD)操作。它基于 SQLAlchemy ORM 框架 和一个自定义的装饰器 with_session 实现数据库会话管理。 📘 一、整体功能概述 该模块…...
如何更改默认 Crontab 编辑器 ?
在 Linux 领域中,crontab 是您可能经常遇到的一个术语。这个实用程序在类 unix 操作系统上可用,用于调度在预定义时间和间隔自动执行的任务。这对管理员和高级用户非常有益,允许他们自动执行各种系统任务。 编辑 Crontab 文件通常使用文本编…...
MyBatis中关于缓存的理解
MyBatis缓存 MyBatis系统当中默认定义两级缓存:一级缓存、二级缓存 默认情况下,只有一级缓存开启(sqlSession级别的缓存)二级缓存需要手动开启配置,需要局域namespace级别的缓存 一级缓存(本地缓存&#…...
