我是靠谱客的博主 认真大山,最近开发中收集的这篇文章主要介绍学习日记(集合、常用类之 ArrayList)学习日记(集合、常用类之 ArrayList),觉得挺不错的,现在分享给大家,希望可以做个参考。
概述
文章目录
- 学习日记(集合、常用类之 ArrayList)
- 一、概述
- 二、ArrayList 集合
- 1. 添加元素
- 2. 泛型
- 3. 常用 API、遍历
- 三、案例
- 1. 案例 1:遍历并删除元素值
- 2. 案例 2:存储自定义类型的对象
- 3. 案例 3:元素搜索
- 4. 案例代码
- 注意:
学习日记(集合、常用类之 ArrayList)
一、概述
集合和数组一样,是一种容器,是用来装数据的,集合和数组比较如下。
集合 | 数组 | |
---|---|---|
大小(长度) | 不固定,动态变化 | 固定 |
元素类型 | 可以不固定 | 确定 |
功能 | 丰富(增删改查等) | 单一(取元素,赋值等) |
使用场景 | 数据个数不确定,且需要做增删元素的场景,如购物车等 | 类型和长度确定的场景,如存四个季节、周一到周日等 |
二、ArrayList 集合
ArrayList 是集合中的一种,支持索引。
1. 添加元素
方法名 | 说明 |
---|---|
public boolean add(E e) | 将指定的元素 e 添加到此集合的末尾 |
public void add(int index, E element) | 将指定的元素 e 添加到此集合的 index 位置 |
注意:添加元素的两种方法相当于方法的重载;第一种方法有返回值类型,且为 boolean 型,一般都为 true。
2. 泛型
ArrayList 是一个泛型类,可以在编译阶段约束集合对象只能操作某种数据类型,是一种规范标准,如:
泛型类 | 可操作的数据类型 |
---|---|
ArrayList | 此集合只能操作字符串类型的元素 |
ArrayList | 此集合只能操作整数类型的元素 |
注意:集合中只能存储引用类型,不支持基本数据类型!;Integer 是整数的引用类型。
注意:JDK 1.7 开始,泛型后面的类型声明可以不写。
3. 常用 API、遍历
常用方法名称 | 说明 |
---|---|
public int size() | 个数:返回集合中元素的个数 |
public boolean add(E e) | 增:将指定的元素 e 添加到此集合的末尾 |
public void add(int index, E element) | 增:将指定的元素 e 添加到此集合的 index 位置 |
public E remove(int index) | 删:删除指定索引处的元素,返回被删除的元素 |
public boolean remove(Object o) | 删:删除指定的元素,返回删除是否成功 |
public E get(int index) | 查:返回指定索引处的元素 |
public E set(int index, E element) | 改:修改指定索引处的元素,返回被修改的元素 |
注意有的方法有返回值,但重点还是关注功能;用 for 循环进行元素的遍历。
三、案例
1. 案例 1:遍历并删除元素值
需求:
- 某个班级的考试在系统上进行,成绩分别为:98,77,66,89,79,50,100;
- 现在需要先把成绩低于 80 分以下的数据去掉。
总结:从集合中遍历元素并删除特定元素的方法:
-
从集合前面遍历元素并删除,每删除一个元素用 i–;
-
从集合后面遍历元素并删除,可以避免漏掉元素。
2. 案例 2:存储自定义类型的对象
需求:
- 学校存储 3 名学生的信息,依次展示出来。
自定义学生类
创建对象,输出信息
结果
总结:集合中存储的元素并不是对象本身,而是对象的地址。
3. 案例 3:元素搜索
需求:
学号 姓名 年龄 班级 得分等级 20220901 小红 21 通信 1 班 A 20220902 小强 22 计算机 2 班 A 20220903 大壮 23 电子信息 3 班 B 20220904 小张 24 物联网 4 班 B
- 后台存储以上学生信息并展示;
- 提供按学号搜索学生信息的功能。
自定义学生类
实现功能
运行结果
总结:标志位的巧妙使用
4. 案例代码
package com.residue;
import java.util.ArrayList;
public class Set05 {
public static void main(String[] args) {
/*
案例一 需求:
1. 某个班级的考试在系统上进行,成绩分别为:98,77,66,89,79,50,100;
2. 现在需要先把成绩低于 80 分以下的数据去掉。
*/
ArrayList<Integer> grades = new ArrayList<>();
int[] numbers = {98, 77, 66, 89, 79, 50, 100};
//用数组给集合元素赋值
for (int i = 0; i < numbers.length; i++) {
grades.add(numbers[i]);
}
System.out.println(grades);
//[98,77,66,89,79,50,100]
//把成绩低于 80 分以下的数据去掉
//方法一:正向遍历,需要 i--
for (int i = 0; i < grades.size(); i++) {
if (grades.get(i) < 80) {
grades.remove(i);
i--;
}
}
//方法二:逆向遍历
//
for (int i = grades.size() - 1; i >= 0; i--) {
//
if (grades.get(i) < 80) {
//
grades.remove(i);
//
}
//
}
System.out.println(grades);
//[98,89,100]
}
}
package com.residue.set06;
import java.util.ArrayList;
public class Set06 {
/*
案例二 需求:学校存储 3 名学生的信息,依次展示出来。
*/
public static void main(String[] args) {
Student s1 = new Student("强", 22, 95.8, 'A');
Student s2 = new Student("红", 23, 91.5, 'B');
Student s3 = new Student("起", 21, 93.6, 'A');
ArrayList<Student> students = new ArrayList<>();
students.add(s1);
students.add(s2);
students.add(s3);
for (int i = 0; i < students.size(); i++) {
Student s = students.get(i);
System.out.println("姓名:" + s.getName());
System.out.println("年龄:" + s.getAge());
System.out.println("成绩:" + s.getScore());
System.out.println("等级:" + s.getGrade());
s.printGrade(s.getName());
System.out.println("===================================");
}
}
}
package com.residue.set08;
import java.util.ArrayList;
import java.util.Scanner;
public class Application {
public static void main(String[] args) {
/*
案例三 需求:
1. 后台存储学生信息并展示;
2. 提供按学号搜索信息的功能。
*/
//存储学生信息
Student s1 = new Student(20220901, "小红", 21, "通信 1 班", 'A');
Student s2 = new Student(20220902, "小强", 22, "计算机 2 班", 'A');
Student s3 = new Student(20220903, "大壮", 23, "电子信息 3 班", 'B');
Student s4 = new Student(20220904, "小张", 24, "物联网 4 班", 'B');
ArrayList<Student> students = new ArrayList<>();
students.add(s1);
students.add(s2);
students.add(s3);
students.add(s4);
//展示学生信息
new Application().printMessage(students);
//按学号搜索信息
System.out.print("请输入所要查找学生信息的学号:");
Scanner scanner = new Scanner(System.in);
new Application().searchMessage(scanner, students);
scanner.close();
}
//展示学生信息的功能方法
public void printMessage(ArrayList<Student> students) {
for (int i = 0; i < students.size(); i++) {
System.out.println("学号:" + students.get(i).getId());
System.out.println("姓名:" + students.get(i).getName());
System.out.println("年龄:" + students.get(i).getAge());
System.out.println("班级:" + students.get(i).getClassroom());
System.out.println("等级:" + students.get(i).getGrade());
System.out.println("============================================");
}
}
//按学号搜索信息的功能方法
public void searchMessage(Scanner scanner, ArrayList<Student> students) {
int flag1 = 0;
while (scanner.hasNextInt()) {
flag1 = 1;
int num = scanner.nextInt();
int flag2 = 0;
for (int i = 0; i < students.size(); i++) {
if (students.get(i).getId() == num) {
flag2 = 1;
System.out.println("学号为 " + num + " 的同学为:" + students.get(i).getName());
System.out.println("他(她) " + students.get(i).getAge() + " 岁,在" + students.get(i).getClassroom());
System.out.println("等级为 " + students.get(i).getGrade());
flag1 = -1;
break;
}
}
if (flag2 == 0) {
System.out.print("没有该学生信息,请重新输入学号:");
} else {
break;
}
}
if (flag1 != -1) {
System.out.println("您的输入不符合学号的格式!");
System.exit(0);
}
}
}
注意:
- 可以在 API 文档中查找所用到的功能。
- 不是所有类都支持泛型,只有类支持才可以用泛型,ArrayList 类支持。
- 如果一个集合中有两个及以上相同的元素,当删除该元素时,会删除靠前的元素。
- 如果输出转义字符
t
,最好用双引号,如"t"
,若用单引号,则与 int 类型相加时,会被当为 char 类型从而转化为 int 类型相加。 - 在任何地方存引用类型的变量,都是存的变量的地址。
- 学会标志位的巧妙使用。
最后
以上就是认真大山为你收集整理的学习日记(集合、常用类之 ArrayList)学习日记(集合、常用类之 ArrayList)的全部内容,希望文章能够帮你解决学习日记(集合、常用类之 ArrayList)学习日记(集合、常用类之 ArrayList)所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复