ArrayList 案例
案例1:
目标:掌握ArrayList的基本使用
需求:
-
某个班级的考试在系统上进行,成绩大致为:98,77,66,89,79,50,100,现在需要先把成绩低于80分以下的数据去掉
-
/* 易错点: for (int i = 0; i < score.size(); i++) { if(score.get(i)<80){ score.remove(i); } */ 由于每删除一个元素。会导致后一个元素自动向前补齐,导致后一个元素没有判断,是否小于80.
/**
* 案例:遍历并删除元素值
* 需求:某个班级的考试在系统上进行,成绩大致为:98,77,66,89,79,50,100
* 现在需要先把成绩低于80分以下的数据去掉
* */
public class ArrayListDemo1 {
public static void main(String[] args) {
//创建集合对象,存储学生分数
ArrayList<Integer> score = new ArrayList<Integer>();
//添加向集合中对象
score.add(98);
score.add(77);
score.add(66);
score.add(89);
score.add(79);
score.add(50);
score.add(100);
System.out.println(score);
/* for (int i = 0; i < score.size(); i++) {
if(score.get(i)<80){
score.remove(i);
}
}*/
for (int i = score.size() - 1; i >= 0; i--) {
if (score.get(i) < 80) {
score.remove(i);
}
}
System.out.println(score);
}
}
**案例二:**影片信息在程序中的表示
**需求:**某影院系统需要在后台存储上述三部电影,然后依次展示出来。
**分析:**三部电影是三个对象,定义一个电影类,定义一个集合存储电影对象创建3个电影对象,封装相关数据,把3个对象存入到集合中
//电影类
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;
}
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;
}
}
import java.util.ArrayList;
/**
* 案例:影片信息在程序中的表示
* 需求:某影院系统需要在后台存储上述三部电影,然后依次展示出来。
* 分析:三部电影是三个对象,定义一个电影类,定义一个集合存储电影对象
* 创建3个电影对象,封装相关数据,把3个对象存入到集合中
*
* */
public class ArrayListDemo2 {
public static void main(String[] args) {
//1.定义一个电影类:Movie
//2.定义一个ArrayList集合存储这些影片对象
ArrayList<Movie> movieList = new ArrayList<>();
//3.创建影片对象封装电影数据,把对象加入到集合中去
/* //方法1
Movie m1 = new Movie("肖申克的救赎", 9.7, "罗宾斯");
movieList.add(m1);
Movie m2 = new Movie("霸王别姬", 9.6, "张国荣");
movieList.add(m2);
Movie m3 = new Movie("阿甘正传", 9.5, "汤姆汉克斯");
movieList.add(m3);
//遍历输出影片信息
System.out.println("评分最高的三部电影:");
System.out.println("电影名称" + "\t\t\t" + "电影评分" + "\t" + "电影主演");
System.out.println(movieList); // 只会打印存储在movieList中对象的地址
for (int i = 0; i < movieList.size(); i++) {
System.out.println(movieList.get(i).getName() + "\t\t\t" +
movieList.get(i).getScore() + "\t\t" +
movieList.get(i).getActor());
}*/
//方法2
//将电影对象存储到movieList中
movieList.add(new Movie("肖申克的救赎", 9.7, "罗宾斯"));
movieList.add(new Movie("霸王别姬", 9.6, "张国荣"));
movieList.add(new Movie("阿甘正传", 9.5, "汤姆汉克斯"));
//循环遍历,并打印影片信息
System.out.println("评分最高的三部电影:");
System.out.println("电影名称" + "\t\t\t" + "电影评分" + "\t" + "电影主演");
for (int i = 0; i < movieList.size(); i++) {
System.out.println(movieList.get(i).getName() + "\t\t\t" +
movieList.get(i).getScore() + "\t\t" +
movieList.get(i).getActor());
}
}
}
案例三:学生信息系统的数据搜索
**需求:**后台程序需要存储如上信息并展示,然后要提供按照学号搜索学生信息的功能
分析:
- 定义Student类,定义ArrayList集合存储学生信息,并遍历展示
- 提供一个方法,可以接收ArrayList集合,和要搜索的学号,返回搜索到的学生对象信息,并展示。
- 使用死循环,让用户可以不停的搜索
//学生类
public class Student {
private String sid; //学号
private String name; //姓名
private int age; //年龄
private String studentClass; //班级
public Student(String sid, String name, int age, String studentClass) {
this.sid = sid;
this.name = name;
this.age = age;
this.studentClass = studentClass;
}
public Student() {
}
public String getSid() {
return sid;
}
public void setSid(String sid) {
this.sid = sid;
}
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 getStudentClass() {
return studentClass;
}
public void setStudentClass(String studentClass) {
this.studentClass = studentClass;
}
}
import java.util.ArrayList;
import java.util.Scanner;
/**
* ArrayList案例:学生信息系统的数据搜索
* 需求:后台程序需要存储如上信息并展示,然后要提供按照学号搜索学生信息的功能
* 分析:
* 1.定义Student类,定义ArrayList集合存储学生信息,并遍历展示
* 2.提供一个方法,可以接收ArrayList集合,和要搜索的学号,返回搜索到的学生对象信息,并展示。
* 3.使用死循环,让用户可以不停的搜索
* */
public class ArrayListDemo3 {
public static void main(String[] args) {
//创建ArrayList集合,存储学生对象
ArrayList<Student> studentList = new ArrayList<>();
//向集合中添加学生对象
studentList.add(new Student("201801033001", "令狐冲", 23, "华山派"));
studentList.add(new Student("201801033002", "东方不败", 30, "日月神教"));
studentList.add(new Student("201801033003", "风清扬", 100, "华山派"));
studentList.add(new Student("201801033004", "郭靖", 23, "桃花岛"));
//创建键盘扫描器对象
Scanner sc = new Scanner(System.in);
//定义变量存储学生学号
String sid;
//创建学生对象存储查询到的对应学生
Student s;
//循环遍历集合中的学生信息
System.out.println("学号" + "\t\t\t\t" +
"姓名" + "\t\t" +
"年龄" + "\t\t" +
"班级");
for (int i = 0; i < studentList.size(); i++) {
System.out.println(studentList.get(i).getSid() + "\t" +
studentList.get(i).getName() + "\t"+
studentList.get(i).getAge() + "\t" +
studentList.get(i).getStudentClass());
}
while (true){
System.out.println("请输入学生学号:");
//获取键盘输入信息,并存储到sid中
sid = sc.next();
//将sid传入getStudentInformation函数中,获取对应对象
s = getStudentInformation(sid, studentList);
//打印查询到的学生信息
printStudentInformation(s);
}
}
//定义方法展示学生信息
public static Student getStudentInformation(String sid, ArrayList<Student> studentList){
Student s = new Student();
for (int i = 0; i < studentList.size(); i++) {
if(studentList.get(i).getSid().equals(sid)){
s = studentList.get(i);
break;
}
}
if(s.getSid() == null){
System.out.println("未查询到该学生信息!");
}
return s;
}
//定义方法打印学生信息
public static void printStudentInformation(Student s){
System.out.println("学号:" + s.getSid());
System.out.println("姓名:" + s.getName());
System.out.println("年龄:" + s.getAge());
System.out.println("班级:" + s.getStudentClass());
System.out.println("===============================");
}
}