ArrayList
集合类的子类
是一个长度可变的容器
public static void main(String[] args) {
ArrayList list = new ArrayList();
// 添加元素
list.add(1);
list.add(true);
list.add("hello");
// 获取list的元素的 个数
System.out.println(list.size());
//移除元素
list.remove(1);
//修改元素
list.set(0,11);
//遍历ArrayList
for(int i = 0 ; i < list.size();i++){
System.out.println(list.get(i));
}
// 判断容器中是否包含某一个元素
System.out.println(list.contains(111));
}
import java.util.ArrayList;
public class ArrayListDemo_02 {
/*
案例:存储字符串并遍历
需求:创建一个存储字符串的集合,存储3个字符串元素,
使用程序实现在控制台遍历该集合
思路:
1 创建一个 ArrayList
2 容器中存储的是 String对象
3 遍历
*/
public static void main(String[] args) {
// 创建一个容器
ArrayList<String> strList = new ArrayList<>();
//添加元素
strList.add("java");
strList.add("HTML");
strList.add("Spring");
// 遍历
for(int i = 0 ; i <strList.size();i++){
System.out.println(strList.get(i));
}
// 使用增强for来遍历
for(String str : strList){
System.out.println(str);
}
}
}
一、用数组实现
// student类
public class Student {
private int stuId;// 学号
private String stuName;//姓名
private int age;//年龄
public Student() {
}
public Student(String stuName, int age) {
this.stuName = stuName;
this.age = age;
}
public Student(int stuId, String stuName, int age) {
this.stuId = stuId;
this.stuName = stuName;
this.age = age;
}
public int getStuId() {
return stuId;
}
public void setStuId(int stuId) {
this.stuId = stuId;
}
public String getStuName() {
return stuName;
}
public void setStuName(String stuName) {
this.stuName = stuName;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public void show(){
System.out.println(this.getStuId() +"--"+this.getStuName()+"---"+this.getAge());
}
}
public class ArrayListDemo_03 {
//使用数组来存储自定义类型
public static void main(String[] args) {
// 创建自定义类型的数组
Student[] stuArr = new Student[3];
stuArr[0]= new Student(1,"张三",22);
Student stu = new Student();
stu.setStuId(2);
stu.setStuName("李四");
stu.setAge(20);
stuArr[1] = stu;
stuArr[2]= new Student(3,"王五",23);
//遍历数组
for(int i = 0 ; i < stuArr.length;i++){
stuArr[i].show();
}
System.out.println("------------------------------");
// 使用增强for
for(Student student :stuArr){
student.show();
}
}
}
二、ArrayList实现
import java.util.ArrayList;
public class ArrayListDemo_03 {
//使用数组来存储自定义类型
public static void main(String[] args) {
//创建一个 容器
ArrayList<Student> list = new ArrayList<>();
list.add(new Student(1,"辛巴",21));
Student student = new Student(2,"李佳琪",25);
list.add(student);
list.add(new Student(3,"维亚",28));
for (int i = 0 ; i < list.size();i++){
list.get(i).show();
}
System.out.println("------------------");
for(Student stu1 :list){
stu1.show();
}
}
}
public class ArrayListDemo_04 {
/*
需求:创建一个存储学生对象的集合,存储3个学生对象,
使用程序实现在控制台遍历该集合,
学生的姓名和年龄来自于键盘录入
*/
public static void main(String[] args) {
//1 创建集合
ArrayList<Student> list = new ArrayList<>();
//从键盘输入 创建Scanner对象
Scanner sc = new Scanner(System.in);
// 2 构建学生对象
for(int i = 0 ; i < 3 ;i++){
// 每次都 创建 一个新的学生对象
Student stu = new Student();
//为学生对象的属性赋值 输入的时候 最好不要进行混合类型的输入
System.out.println("请输入学生的ID:");
stu.setStuId(sc.nextLine());
System.out.println("请输入学生的姓名:");
stu.setStuName(sc.nextLine());
System.out.println("请输入学生年龄:");
stu.setAge(sc.nextLine());
//将创建好的学生对象添加到集合
list.add(stu);
}
//遍历集合 输出学生信息
for(Student stu : list){
stu.show();
}
}
}
应用:学生管理系统
import java.util.ArrayList;
import java.util.Scanner;
public class StudentManagerSystem {
// 定义存储学生信息的 集合
private static ArrayList<Student> list = new ArrayList<>();
public static void main(String[] args) {
systemUI();
}
//1 绘制主界面 包含操作菜单
public static void systemUI(){
//1 使用Scanner进行键盘输入
Scanner sc = new Scanner(System.in);
// 因为程序一直出于运行状态 直到用户输入5 程序结束
while(true){
System.out.println("-------欢迎使用学生管理系统-------");
System.out.println("1.新增学生信息");
System.out.println("2.删除学生信息");
System.out.println("3.修改学生信息");
System.out.println("4.查看学生信息");
System.out.println("5.退出系统");
System.out.println("请根据菜单提示,选择您要进行的操作:");
int opt = sc.nextInt();
switch (opt){
case 1:
addStudent();
break;
case 2 :
deleteStudent();
break;
case 3:
updateStudent();
break;
case 4:
selectStudent();
break;
case 5:
System.exit(0);
break;
default:
System.out.println("您的选择有误,请重新选择");
break;
}
}
}
// 新增学生信息 每选择一次新增操作 只能新增一个学生信息
public static void addStudent(){
Student student = new Student();
Scanner sc = new Scanner(System.in);
//为学生对象的属性赋值
// 学号:使用数字 使用整数 从1开始 不合理
System.out.println("请输入学生的ID:");
student.setStuId(sc.nextLine());
System.out.println("请输入学生的姓名:");
student.setStuName(sc.nextLine());
System.out.println("请输入学生年龄:");
student.setAge(sc.nextLine());
//将创建好的学生对象添加到集合
list.add(student);
System.out.println("添加学生成功");
}
//删除学生信息 根据学生的ID删除
public static void deleteStudent(){
//从键盘输入学生的ID
Scanner sc = new Scanner(System.in);
System.out.println("请输入您要删除的学生的ID:");
String id = sc.nextLine();
// 在真实的程序中 学生的 学号是字符串类型 那么如何根据学号来确定我们要删除的学生
// 遍历所有的 学生对象 然后通过id的比较 获得要删除 的 学生在集合中的索引
int index = -1;
for(int i = 0 ; i< list.size();i++){
Student stu = list.get(i);
if(stu.getStuId().equals(id)){
index = i;
break;
}
}
if(index == -1){
System.out.println("学号输入有误,该学生不存在");
}else{
list.remove(index);
System.out.println("删除成功");
}
}
//修改学生信息
public static void updateStudent(){
//从键盘输入学生的ID
Scanner sc = new Scanner(System.in);
System.out.println("请输入您要修改的学生的ID:");
String id = sc.nextLine();
// 在真实的程序中 学生的 学号是字符串类型 那么如何根据学号来确定我们要删除的学生
// 遍历所有的 学生对象 然后通过id的比较 获得要删除 的 学生在集合中的索引
int index = -1;
Student oldStu = null ;
for(int i = 0 ; i< list.size();i++){
Student stu = list.get(i);
if(stu.getStuId().equals(id)){
oldStu = stu;
index = i;
break;
}
}
if(index == -1){
System.out.println("学号输入有误,该学生不存在");
}else{
Student newStu = new Student();
newStu.setStuId(oldStu.getStuId());
System.out.println("请输入学生的新姓名:");
newStu.setStuName(sc.nextLine());
System.out.println("请输入学生xin年龄:");
newStu.setAge(sc.nextLine());
list.set(index,newStu);
System.out.println("修改成功");
}
}
//查看学生信息
public static void selectStudent(){
for(Student stu : list){
stu.show();
}
}
}