本篇我們將學(xué)習(xí)一個(gè)集合類之ArrayList類,該類可以使我們對(duì)一組元素輕松的實(shí)現(xiàn)增刪改查。在實(shí)際開(kāi)發(fā)中佩番,我們開(kāi)發(fā)的任何項(xiàng)目掐松,最基本的操作就是增刪改查踱侣。所以本篇我們也將會(huì)通過(guò)一個(gè)簡(jiǎn)單的綜合案例之學(xué)生管理系統(tǒng),體會(huì)一下項(xiàng)目中最基本的操作增刪改查大磺。
第一章:ArrayList
1.1-為什么要學(xué)習(xí)ArrayList(了解)
我們看一個(gè)簡(jiǎn)單的需求:有一組數(shù)據(jù)(如:學(xué)生姓名)抡句,向這一組數(shù)據(jù)中繼續(xù)添加數(shù)據(jù),添加個(gè)數(shù)不確定量没。
對(duì)于一組數(shù)據(jù)玉转,我們可能首先想到的是數(shù)組。用數(shù)組存儲(chǔ)一組字符串殴蹄,這個(gè)數(shù)組的長(zhǎng)度是固定的究抓,但是未來(lái)添加的個(gè)數(shù)是不確定的猾担,所以數(shù)組有一定的局限性,并且對(duì)于數(shù)組中元素的操作(增刪改查)相對(duì)比較麻煩刺下,并沒(méi)有直接的API方法讓我們快速實(shí)現(xiàn)對(duì)數(shù)組元素的增刪改查绑嘹。
好消息是java中提供了一個(gè)新的集合類,這個(gè)集合類的長(zhǎng)度是動(dòng)態(tài)變化的橘茉,并且提供了API方法工腋,能讓我們快速實(shí)現(xiàn)對(duì)一組元素的增刪改查。這個(gè)類就是ArrayList
1.2-ArrayList概述(了解)
ArrayList是一種集合畅卓,是大小可變的數(shù)組的實(shí)現(xiàn)擅腰,存儲(chǔ)在內(nèi)的數(shù)據(jù)稱為元素。此類提供一些方法來(lái)操作內(nèi)部存儲(chǔ)
的元素翁潘。 ArrayList 中可不斷添加元素趁冈,其大小(集合長(zhǎng)度)也自動(dòng)增長(zhǎng)拜马。
1.3-創(chuàng)建ArrayList(記憶)
導(dǎo)包:java.util.ArrayList;
創(chuàng)建方式1:ArrayList<E> 變量名 = new ArrayList<>()
創(chuàng)建方式2:ArrayList<E> 變量名 = new ArrayList()
- E 表示集合中未來(lái)要存放的數(shù)據(jù)類型渗勘,比如存放一組字符串,就是
ArrayList<String>
import java.util.ArrayList;
public class Test08 {
public static void main(String[] args) {
ArrayList<String> list = new ArrayList<>();
}
}
1.4-操作ArrayList(記憶)
常用的成員方法
代碼
import java.util.ArrayList;
public class Test08 {
public static void main(String[] args) {
// 創(chuàng)建集合俩莽,可以存儲(chǔ)一組字符串
ArrayList<String> list = new ArrayList<>();
// 添加元素
list.add("張三");
list.add("李四");
System.out.println(list.toString()); //輸出結(jié)果:[張三, 李四]
// 向索引為1的位置添加元素
list.add(1,"小三");
System.out.println(list.toString()); // 輸出結(jié)果:[張三, 小三, 李四]
// 輸出集合的長(zhǎng)度
System.out.println(list.size()); // 輸出結(jié)果:3
// 獲取索引為1的元素
System.out.println(list.get(1)); // 輸出結(jié)果:小三
// 設(shè)置索引為1的元素為“王五”
list.set(1,"王五");
System.out.println(list.toString()); // 輸出結(jié)果:[張三, 王五, 李四]
// 移除
list.remove("王五");
System.out.println(list.toString()); // 輸出結(jié)果:[張三, 李四]
// 遍歷(for循環(huán)遍歷)
for (int i = 0; i < list.size(); i++) {
System.out.println(list.get(i));
}
}
}
第二章:案例
2.1-案例1(練習(xí))
需求:
創(chuàng)建一個(gè)存儲(chǔ)學(xué)生對(duì)象的集合旺坠,存儲(chǔ)3個(gè)學(xué)生對(duì)象,使用程序?qū)崿F(xiàn)在控制臺(tái)遍歷該集合扮超。
學(xué)生信息有姓名和年齡取刃。
分析:
/*
思路:
1:定義學(xué)生類
2:創(chuàng)建集合對(duì)象
3:創(chuàng)建學(xué)生對(duì)象
4:添加學(xué)生對(duì)象到集合中
5:遍歷集合,采用通用遍歷格式實(shí)現(xiàn)
*/
代碼
學(xué)生類Student
package www.penglei666.com.demo01;
public class Student {
private String name;
private int age;
public Student() {
}
public Student(String name, int age) {
this.name = name;
this.age = age;
}
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;
}
}
操作測(cè)試類StudentManger
package www.penglei666.com.demo01;
import java.util.ArrayList;
public class StudentManger {
public static void main(String[] args) {
// 創(chuàng)建集合
ArrayList<Student> list = new ArrayList<>();
// 創(chuàng)建學(xué)生對(duì)象
Student stu1 = new Student("張三",10);
Student stu2= new Student("李四",12);
Student stu3 = new Student("王五",11);
// 向集合中添加元素
list.add(stu1);
list.add(stu2);
list.add(stu3);
// 遍歷集合
for (int i = 0; i < list.size(); i++) {
Student stu = list.get(i);
System.out.println(stu.getName() + "," + stu.getAge());
}
}
}
2.2-案例2(練習(xí))
需求:
創(chuàng)建一個(gè)存儲(chǔ)學(xué)生對(duì)象的集合瞒津,存儲(chǔ)3個(gè)學(xué)生對(duì)象蝉衣,使用程序?qū)崿F(xiàn)在控制臺(tái)遍歷該集合
學(xué)生的姓名和年齡來(lái)自于鍵盤錄入。
分析:
/*
思路:
1:定義學(xué)生類巷蚪,為了鍵盤錄入數(shù)據(jù)方便病毡,把學(xué)生類中的成員變量都定義為String類型
2:創(chuàng)建集合對(duì)象
3:鍵盤錄入學(xué)生對(duì)象所需要的數(shù)據(jù)
4:創(chuàng)建學(xué)生對(duì)象,把鍵盤錄入的數(shù)據(jù)賦值給學(xué)生對(duì)象的成員變量
5:往集合中添加學(xué)生對(duì)象
6:遍歷集合屁柏,采用通用遍歷格式實(shí)現(xiàn)
*/
代碼
學(xué)生類同上案例1
操作測(cè)試類
public class StudentManger {
public static void main(String[] args) {
//創(chuàng)建集合對(duì)象
ArrayList<Student> array = new ArrayList<Student>();
//為了提高代碼的復(fù)用性啦膜,我們用方法來(lái)改進(jìn)程序
addStudent(array);
addStudent(array);
addStudent(array);
//遍歷集合,采用通用遍歷格式實(shí)現(xiàn)
for (int i = 0; i < array.size(); i++) {
Student s = array.get(i);
System.out.println(s.getName() + "," + s.getAge());
}
}
/*
兩個(gè)明確:
返回值類型:void
參數(shù):ArrayList<Student> array
*/
public static void addStudent(ArrayList<Student> array) {
//鍵盤錄入學(xué)生對(duì)象所需要的數(shù)據(jù)
Scanner sc = new Scanner(System.in);
System.out.println("請(qǐng)輸入學(xué)生姓名:");
String name = sc.nextLine();
System.out.println("請(qǐng)輸入學(xué)生年齡:");
String age = sc.nextLine();
//創(chuàng)建學(xué)生對(duì)象淌喻,把鍵盤錄入的數(shù)據(jù)賦值給學(xué)生對(duì)象的成員變量
Student s = new Student();
s.setName(name);
s.setAge(age);
//往集合中添加學(xué)生對(duì)象
array.add(s);
}
}
2.3-學(xué)生信息管理系統(tǒng)(綜合練習(xí))
需求:
針對(duì)目前我們的所學(xué)內(nèi)容僧家,完成一個(gè)綜合案例:學(xué)生管理系統(tǒng)!該系統(tǒng)主要功能如下:
添加學(xué)生:通過(guò)鍵盤錄入學(xué)生信息裸删,添加到集合中
刪除學(xué)生:通過(guò)鍵盤錄入要?jiǎng)h除學(xué)生的學(xué)號(hào)八拱,將該學(xué)生對(duì)象從集合中刪除
修改學(xué)生:通過(guò)鍵盤錄入要修改學(xué)生的學(xué)號(hào),將該學(xué)生對(duì)象其他信息進(jìn)行修改
查看學(xué)生:將集合中的學(xué)生對(duì)象信息進(jìn)行展示
退出系統(tǒng):結(jié)束程序
實(shí)現(xiàn)步驟:
-
定義學(xué)生類,包含以下成員變量
private String sid // 學(xué)生id
private String name // 學(xué)生姓名
private String age // 學(xué)生年齡
private String address // 學(xué)生所在地
-
學(xué)生管理系統(tǒng)主界面的搭建步驟
- 2.1 用輸出語(yǔ)句完成主界面的編寫
- 2.2 用Scanner實(shí)現(xiàn)鍵盤輸入
- 2.3 用switch語(yǔ)句完成選擇的功能
- 2.4 用循環(huán)完成功能結(jié)束后再次回到主界面
-
學(xué)生管理系統(tǒng)的添加學(xué)生功能實(shí)現(xiàn)步驟
- 3.1 定義一個(gè)方法肌稻,接收ArrayList
<Student>
集合 - 3.2 方法內(nèi)完成添加學(xué)生的功能
- ①鍵盤錄入學(xué)生信息
- ②根據(jù)錄入的信息創(chuàng)建學(xué)生對(duì)象
- ③將學(xué)生對(duì)象添加到集合中
- ④提示添加成功信息
- 3.3 在添加學(xué)生的選項(xiàng)里調(diào)用添加學(xué)生的方法
- 3.1 定義一個(gè)方法肌稻,接收ArrayList
-
學(xué)生管理系統(tǒng)的查看學(xué)生功能實(shí)現(xiàn)步驟
- 4.1 定義一個(gè)方法清蚀,接收
ArrayList<Student>
集合 - 4.2 方法內(nèi)遍歷集合,將學(xué)生信息進(jìn)行輸出
- 4.3 在查看所有學(xué)生選項(xiàng)里調(diào)用查看學(xué)生方法
- 4.1 定義一個(gè)方法清蚀,接收
-
學(xué)生管理系統(tǒng)的刪除學(xué)生功能實(shí)現(xiàn)步驟
- 5.1 定義一個(gè)方法爹谭,接收ArrayList
<Student>
集合 - 5.2 方法中接收要?jiǎng)h除學(xué)生的學(xué)號(hào)
- 5.3 遍歷集合枷邪,獲取每個(gè)學(xué)生對(duì)象
- 5.4 使用學(xué)生對(duì)象的學(xué)號(hào)和錄入的要?jiǎng)h除的學(xué)號(hào)進(jìn)行比較,如果相同,則將當(dāng)前學(xué)生對(duì)象從集合中刪除
- 5.5 在刪除學(xué)生選項(xiàng)里調(diào)用刪除學(xué)生的方法
- 5.1 定義一個(gè)方法爹谭,接收ArrayList
-
學(xué)生管理系統(tǒng)的修改學(xué)生功能實(shí)現(xiàn)步驟
- 6.1 定義一個(gè)方法诺凡,接收ArrayList
<Student>
集合 - 6.2 方法中接收要修改學(xué)生的學(xué)號(hào)
- 6.3 通過(guò)鍵盤錄入學(xué)生對(duì)象所需的信息东揣,并創(chuàng)建對(duì)象
- 6.4 遍歷集合,獲取每一個(gè)學(xué)生對(duì)象腹泌。并和錄入的修改學(xué)生學(xué)號(hào)進(jìn)行比較.如果相同嘶卧,則使用新學(xué)生對(duì)象替換當(dāng)前學(xué)生對(duì)象
- 6.5 在修改學(xué)生選項(xiàng)里調(diào)用修改學(xué)生的方法
- 6.1 定義一個(gè)方法诺凡,接收ArrayList
-
退出系統(tǒng)
- 使用System.exit(0);退出JVM
代碼
學(xué)生類:Student
public class Student {
//學(xué)號(hào)
private String sid;
//姓名
private String name;
//年齡
private String age;
//居住地
private String address;
public Student() {
}
public Student(String sid, String name, String age, String address) {
this.sid = sid;
this.name = name;
this.age = age;
this.address = address;
}
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 String getAge() {
return age;
}
public void setAge(String age) {
this.age = age;
}
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
}
操作測(cè)試類:StudentManger
package www.penglei666.com.demo02;
import java.util.ArrayList;
import java.util.Scanner;
public class StudentManger {
/*
1:用輸出語(yǔ)句完成主界面的編寫
2:用Scanner實(shí)現(xiàn)鍵盤錄入數(shù)據(jù)
3:用switch語(yǔ)句完成操作的選擇
4:用循環(huán)完成再次回到主界面
*/
public static void main(String[] args) {
//創(chuàng)建集合對(duì)象,用于保存學(xué)生數(shù)據(jù)信息
ArrayList<Student> array = new ArrayList<Student>();
//用循環(huán)完成再次回到主界面
while (true) {
//用輸出語(yǔ)句完成主界面的編寫
System.out.println("--------歡迎來(lái)到學(xué)生管理系統(tǒng)--------");
System.out.println("1 添加學(xué)生");
System.out.println("2 刪除學(xué)生");
System.out.println("3 修改學(xué)生");
System.out.println("4 查看所有學(xué)生");
System.out.println("5 退出");
System.out.println("請(qǐng)輸入你的選擇:");
//用Scanner實(shí)現(xiàn)鍵盤錄入數(shù)據(jù)
Scanner sc = new Scanner(System.in);
String line = sc.nextLine();
//用switch語(yǔ)句完成操作的選擇
switch (line) {
case "1":
addStudent(array);
break;
case "2":
deleteStudent(array);
break;
case "3":
updateStudent(array);
break;
case "4":
findAllStudent(array);
break;
case "5":
System.out.println("謝謝使用");
System.exit(0); //JVM退出
}
}
}
//定義一個(gè)方法真屯,用于添加學(xué)生信息
public static void addStudent(ArrayList<Student> array) {
//鍵盤錄入學(xué)生對(duì)象所需要的數(shù)據(jù),顯示提示信息脸候,提示要輸入何種信息
Scanner sc = new Scanner(System.in);
String sid;
while (true) {
System.out.println("請(qǐng)輸入學(xué)生學(xué)號(hào):");
sid = sc.nextLine();
boolean flag = isUsed(array, sid);
if (flag) {
System.out.println("你輸入的學(xué)號(hào)已經(jīng)被占用,請(qǐng)重新輸入");
} else {
break;
}
}
System.out.println("請(qǐng)輸入學(xué)生姓名:");
String name = sc.nextLine();
System.out.println("請(qǐng)輸入學(xué)生年齡:");
String age = sc.nextLine();
System.out.println("請(qǐng)輸入學(xué)生居住地:");
String address = sc.nextLine();
//創(chuàng)建學(xué)生對(duì)象绑蔫,把鍵盤錄入的數(shù)據(jù)賦值給學(xué)生對(duì)象的成員變量
Student s = new Student();
s.setSid(sid);
s.setName(name);
s.setAge(age);
s.setAddress(address);
//將學(xué)生對(duì)象添加到集合中
array.add(s);
//給出添加成功提示
System.out.println("添加學(xué)生成功");
}
//定義一個(gè)方法,判斷學(xué)號(hào)是否被使用
public static boolean isUsed(ArrayList<Student> array, String sid) {
//如果與集合中的某一個(gè)學(xué)生學(xué)號(hào)相同泵额,返回true;如果都不相同配深,返回false
boolean flag = false;
for(int i=0; i<array.size(); i++) {
Student s = array.get(i);
if(s.getSid().equals(sid)) {
flag = true;
break;
}
}
return flag;
}
//定義一個(gè)方法,用于查看學(xué)生信息
public static void findAllStudent(ArrayList<Student> array) {
//判斷集合中是否有數(shù)據(jù)嫁盲,如果沒(méi)有顯示提示信息
if (array.size() == 0) {
System.out.println("無(wú)信息篓叶,請(qǐng)先添加信息再查詢");
//為了讓程序不再往下執(zhí)行,我們?cè)谶@里寫上return;
return;
}
//顯示表頭信息
//\t其實(shí)是一個(gè)tab鍵的位置
System.out.println("學(xué)號(hào)\t\t\t姓名\t\t\t年齡\t\t\t居住地");
//將集合中數(shù)據(jù)取出按照對(duì)應(yīng)格式顯示學(xué)生信息羞秤,年齡顯示補(bǔ)充“歲”
for (int i = 0; i < array.size(); i++) {
Student s = array.get(i);
System.out.println(s.getSid() + "\t\t\t" + s.getName() + "\t\t\t" + s.getAge() + "歲\t\t\t" + s.getAddress());
}
}
//定義一個(gè)方法缸托,用于刪除學(xué)生信息
public static void deleteStudent(ArrayList<Student> array) {
//鍵盤錄入要?jiǎng)h除的學(xué)生學(xué)號(hào),顯示提示信息
Scanner sc = new Scanner(System.in);
System.out.println("請(qǐng)輸入你要?jiǎng)h除的學(xué)生的學(xué)號(hào):");
String sid = sc.nextLine();
//在刪除/修改學(xué)生操作前,對(duì)學(xué)號(hào)是否存在進(jìn)行判斷
//如果不存在瘾蛋,顯示提示信息
//如果存在俐镐,執(zhí)行刪除/修改操作
int index = -1;
for (int i = 0; i < array.size(); i++) {
Student s = array.get(i);
if (s.getSid().equals(sid)) {
index = i;
break;
}
}
if (index == -1) {
System.out.println("該信息不存在,請(qǐng)重新輸入");
} else {
array.remove(index);
//給出刪除成功提示
System.out.println("刪除學(xué)生成功");
}
}
//定義一個(gè)方法哺哼,用于修改學(xué)生信息
public static void updateStudent(ArrayList<Student> array) {
//鍵盤錄入要修改的學(xué)生學(xué)號(hào)佩抹,顯示提示信息
Scanner sc = new Scanner(System.in);
System.out.println("請(qǐng)輸入你要修改的學(xué)生的學(xué)號(hào):");
String sid = sc.nextLine();
//鍵盤錄入要修改的學(xué)生信息
System.out.println("請(qǐng)輸入學(xué)生新姓名:");
String name = sc.nextLine();
System.out.println("請(qǐng)輸入學(xué)生新年齡:");
String age = sc.nextLine();
System.out.println("請(qǐng)輸入學(xué)生新居住地:");
String address = sc.nextLine();
//創(chuàng)建學(xué)生對(duì)象
Student s = new Student();
s.setSid(sid);
s.setName(name);
s.setAge(age);
s.setAddress(address);
//遍歷集合修改對(duì)應(yīng)的學(xué)生信息
for (int i = 0; i < array.size(); i++) {
Student student = array.get(i);
if (student.getSid().equals(sid)) {
array.set(i, s);
}
}
//給出修改成功提示
System.out.println("修改學(xué)生成功");
}
}