案例01:遍历删并除元素值
- 某班级的考试在系统上进行,成绩大致为:98,77,66,89,79,50,100;
- 现在需要先把成绩低于80分以下的数据去掉。
import java.util.ArrayList;
public class Demo01 {
public static void main(String[] args) {
//1.创建一个ArrayList集合存储一个班级学生的成绩:98,77,66,89,79,50,100。
ArrayList<Integer> scores = new ArrayList<>();
scores.add(98);
scores.add(77);
scores.add(66);
scores.add(89);
scores.add(79);
scores.add(50);
scores.add(100);
System.out.println(scores);
//2.从集合中去掉低于80分的集合
//注意:在集合中删除一个元素,后面的元素会往前补,所以在这里要避免删除低于80分的元素,后面的元素补上了导致漏掉检查补上来的元素
//解决避免漏检集合元素方法一:
// for (int i = 0; i < scores.size(); i++) {
// int score = scores.get(i);
// if (score < 80){
// scores.remove(i);
// i--;//删除元素后,让索引往后退一步,避免漏检元素
// }
// }
// System.out.println(scores);
//方法二:从集合最后索引开始往前检查
for (int i = scores.size()-1; i >= 0 ; i--) {
int score = scores.get(i);
if (score < 80){
scores.remove(i);
}
}
System.out.println(scores);
}
}
案例02: 存储自定义类型的对象
- 某电影院系统需要在后台存储以下三部电影,然后依次展示。
电影名称: | 电影评分: | 电影演员: |
《肖申克的救赎》 | 9.7 | 罗宾斯 |
《霸王别姬》 | 9.6 | 张国荣,张丰毅 |
《阿甘正传》 | 9.3 | 汤姆.汉斯克 |
1.定义电影类:
public class Movie {
private String name;
private double score;
private String actor;
//无参构造器
public Movie() {
}
//有参构造器
public Movie(String name, double score, String actor) {
this.name = name;
this.score = score;
this.actor = actor;
}
//设置getter/setter方法
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public double getScore() {
return score;
}
public void setScore(double score) {
this.score = score;
}
public String getActor() {
return actor;
}
public void setActor(String actor) {
this.actor = actor;
}
}
2. 实现存储以上三部电影,并展现电影信息:
import java.util.ArrayList;
public class Demo02 {
public static void main(String[] args) {
//1.定义电影类
//2.创建三个电影对象
Movie m1 = new Movie("《肖申克的救赎》" , 9.7 , "罗宾斯");
Movie m2 = new Movie("《霸王别姬》" , 9.6 , "张国荣,张丰毅");
Movie m3 = new Movie("《阿甘正传》" , 9.5 , "汤姆.汉克斯");
//3.创建一个电影类型的ArrayList集合,存储三部电影对象
ArrayList<Movie> movies = new ArrayList<>();
//添加存储到集合中的是地址,如果直接输出集合对象,会打印出的是地址,而不是内容
movies.add(m1);
movies.add(m2);
movies.add(m3);
System.out.println(movies);//这里会输出三个电影对象m1,m2,m3的地址
//4.遍历电影类型的集合中的每个电影对象,访问它的信息即可
for (int i = 0; i < movies.size(); i++) {
//用一个对象接电影集合对应的地址,再根据相应索引对象的地址访问电影信息
Movie m = movies.get(i);//对象m是地址
System.out.println("电影名称:" + m.getName());
System.out.println("电影评分:" + m.getScore());
System.out.println("电影演员:" + m.getActor());
System.out.println("---------------------------------");
}
}
}
案例03:元素搜索
- 后台程序需要存储以下学生信息并展示,然后要提供按照学号搜索学生信息的功能。
学号: | 姓名: | 年龄: | 班级: |
21190411 | 大大 | 21 | 护理1班 |
21190422 | 小小 | 22 | 护理2班 |
21190433 | 青青 | 23 | 区块链1班 |
21190444 | 楚楚 | 24 | 区块链2班 |
1.定义学生类:
public class Student {
private String studyNumber;
private String name;
private int age;
private String className;
//无参构造器
public Student() {
}
//有参构造器
public Student(String studyNumber, String name, int age, String className) {
this.studyNumber = studyNumber;
this.name = name;
this.age = age;
this.className = className;
}
//设置getter/setter方法
public String getStudyNumber() {
return studyNumber;
}
public void setStudyNumber(String studyNumber) {
this.studyNumber = studyNumber;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getClassName() {
return className;
}
public void setClassName(String className) {
this.className = className;
}
}
2.存储学生信息,完成根据学生学号查询学生信息 :
import java.util.ArrayList;
import java.util.Scanner;
public class Demo03 {
public static void main(String[] args) {
//1.定义学生类
//2.创建集合存储学生对象,创建学生对象封装学生信息,把学生对象添加到集合中去
ArrayList<Student> students = new ArrayList<>();
students.add(new Student("21190411","大大",21,"护理1班"));
students.add(new Student("21190422","小小",22,"护理2班"));
students.add(new Student("21190433","青青",23,"区块链1班"));
students.add(new Student("21190444","楚楚",24,"区块链2班"));
//3.遍历集合信息并展示
System.out.println("学号\t\t\t名字\t\t年龄\t\t班级");
for (int i = 0; i < students.size(); i++) {
Student s = students.get(i);
System.out.println(s.getStudyNumber() + "\t" + s.getName() + "\t\t" + s.getAge() + "\t\t" + s.getClassName());
}
//4.定义方法完成学号的搜索功能
Scanner sc = new Scanner(System.in);
while (true){
System.out.print("请您输入要查询的学生学号:");
String studentNumber = sc.next();
//5.调用方法查询
Student s = getStudentById(students,studentNumber);
//6.判断s中是否存在学生对象地址
if (s == null){
System.out.println("sorry,查无此人。");
}else {
System.out.println("您查询的学生信息如下:");
System.out.println("学号\t\t\t名字\t\t年龄\t\t班级");
System.out.println(s.getStudyNumber() + "\t" + s.getName() + "\t\t" + s.getAge() + "\t\t" + s.getClassName());
}
}
}
/**
*根据学生的学号查询学生对象返回
* @param students 存储全部学生对象的集合
* @param studentNumber 搜索的学生的学号
* @return 学生对象 | null(学生不存在)
*/
public static Student getStudentById(ArrayList<Student> students,String studentNumber){
//1.遍历全部学生对象
for (int i = 0; i < students.size(); i++) {
Student s = students.get(i);//使用对象s存储学生集合中的学生地址
//2.判断当前遍历的学号是否是要找的学号
if (s.getStudyNumber().equals(studentNumber)){
return s;//相等,代表这个s对象的学生对象就是要找的学生,返回该对象
}
}
return null;//遍历完集合信息都没有找到该信息,即查无此人,返回null
}
}