文章目录


简单体验下ArrayList 后面再系统地做Collection的笔记

1.ArrayList

集合和数组的区别 :

共同点:都是存储数据的容器

不同点:数组的容量是固定的,集合的容量是可变的

1.1 ArrayList的构造方法和添加方法

1.1 ArrayList的构造方法和添加方法

public ArrayList()

创建一个空的集合对象

public boolean add(E e)

将指定的元素追加到此集合的末尾

public void add(int index,E element)

在此集合中的指定位置插入指定的元素

ArrayList<E> :

可调整大小的数组实现

<E> : 一种特殊的数据类型,泛型。

怎么用呢 ?

在出现E的地方我们使用引用数据类型替换即可

举例:ArrayList, ArrayList

1.2 ArrayList类常用方法【应用】

**成员方法 : **

public boolean remove(Object o)

删除指定的元素,返回删除是否成功

public E remove(int index)

删除指定索引处的元素,返回被删除的元素

public E set(int index,E element)

修改指定索引处的元素,返回被修改的元素

public E get(int index)

返回指定索引处的元素

public int size()

返回集合中的元素的个数

示例代码 :

public static void main(String[] args) {
ArrayList<String> array = new ArrayList<>();

//添加元素
array.add("hello");
array.add("world");
array.add("java");
array.add("china");
array.add("anhui");

//直接输出
System.out.println(array);//[hello, world, java, china, anhui]

//public boolean remove(Object o):删除指定的元素,返回删除是否成功
System.out.println(array.remove("world"));//true
System.out.println(array.remove("javaEE"));//false

System.out.println(array);//[hello, java, china, anhui]

//public E remove(int index):删除指定索引处的元素,返回被删除的元素
System.out.println(array.remove(0));//hello
System.out.println(array);//[java, china, anhui]

//public E set(int index,E element):修改指定索引处的元素,返回被修改的元素
System.out.println(array.set(2,"whuhan"));//anhui

System.out.println(array);//[java, china, whuhan]

// System.out.println(array.set(3,"sicuan"));//IndexOutOfBoundsException

//public E get(int index):返回指定索引处的元素
System.out.println(array.get(0));//java
System.out.println(array.get(1));//china
System.out.println(array.get(2));//whuhan
// System.out.println(array.get(3));//IndexOutOfBoundsException

//public int size():返回集合中的元素的个数
System.out.println(array.size());//3
}

08-集合基础 简单体验下ArrayList_java

1.3 ArrayList存储字符串并遍历

案例需求 :

创建一个存储字符串的集合,存储3个字符串元素,使用程序实现在控制台遍历该集合

实现步骤 :

    1:创建集合对象
2:往集合中添加字符串对象
3:遍历集合,首先要能够获取到集合中的每一个元素,这个通过get(int index)方法实现
4:遍历集合,其次要能够获取到集合的长度,这个通过size()方法实现
5:遍历集合的通用格式

代码实现 :

public static void main(String[] args) {
ArrayList<String> array = new ArrayList<>();
array.add("月清疏");
array.add("修吾");
array.add("桑游");//查API add返回值boolean 不可连续 array.add("桑游").add("白沫晴"); 报错
array.add("白沫晴");

System.out.println(array.size());

for(int i=0;i<array.size();i++){
String s=array.get(i);
System.out.println(s);
}

System.out.println("---------------------------");
for (String s : array) {
System.out.println(s);
}

}

08-集合基础 简单体验下ArrayList_键盘录入_02

1.4 ArrayList存储学生对象并遍历(存储自定义类)

案例需求 :

创建一个存储学生对象的集合,存储3个学生对象,使用程序实现在控制台遍历该集合

**实现步骤 : **

1:定义学生类

2:创建集合对象

3:创建学生对象

4:添加学生对象到集合中

5:遍历集合,采用通用遍历格式实现

代码实现 :

package cn.whu.day09.collection;

import java.util.ArrayList;

public class Array03Student {
public static void main(String[] args) {
ArrayList<Student> arrayList = new ArrayList<>();
Student s1 = new Student("张三", 17);
Student s2 = new Student("李四", 18);
Student s3 = new Student("王五", 19);

arrayList.add(s1);
arrayList.add(s2);
arrayList.add(s3);

for (int i = 0; i < arrayList.size(); i++) {
Student s=arrayList.get(i);
System.out.println(s.getAge()+" "+s.getName());
}
System.out.println("-----------------------------------");
for (Student s : arrayList) {
System.out.println(s.getAge()+" "+s.getName());
}
}
}

class Student{
private Integer age;
private String name;

public Student(String name,Integer age ) {
this.age = age;
this.name = name;
}

public Integer getAge() {
return age;
}

public void setAge(Integer age) {
this.age = age;
}

public String getName() {
return name;
}

public void setName(String name) {
this.name = name;
}
}

08-集合基础 简单体验下ArrayList_java_03

2. 学生管理系统

2.1 学生管理系统实现步骤

  • 案例需求
    ​ 针对目前我们的所学内容,完成一个综合案例:学生管理系统!该系统主要功能如下:
    ​ 添加学生:通过键盘录入学生信息,添加到集合中
    ​ 删除学生:通过键盘录入要删除学生的学号,将该学生对象从集合中删除
    ​ 修改学生:通过键盘录入要修改学生的学号,将该学生对象其他信息进行修改
    ​ 查看学生:将集合中的学生对象信息进行展示
    退出系统:结束程序
  • 实现步骤
  1. 定义学生类,包含以下成员变量
    学生类: Student成员变量:
    ​ 学号:sid
    ​ 姓名:name
    ​ 年龄:age
    ​ 生日:birthday
    ​ 构造方法:
    ​ 无参构造
    ​ 带四个参数的构造成员方法:
    每个成员变量对应给出get/set方法
  2. 学生管理系统主界面的搭建步骤
    2.1 用输出语句完成主界面的编写
    2.2 用Scanner实现键盘录入数据
    2.3 用switch语句完成操作的选择
    2.4 用循环完成再次回到主界面
  3. 学生管理系统的添加学生功能实现步骤
    3.1 用键盘录入选择添加学生
    3.2 定义一个方法,用于添加学生
    ​ 显示提示信息,提示要输入何种信息
    ​ 键盘录入学生对象所需要的数据
    ​ 创建学生对象,把键盘录入的数据赋值给学生对象的成员变量
    ​ 将学生对象添加到集合中(保存)
    ​ 给出添加成功提示
    3.3 调用方法
  4. 学生管理系统的查看学生功能实现步骤
    4.1 用键盘录入选择查看所有学生信息
    4.2 定义一个方法,用于查看学生信息
    ​ 显示表头信息
    ​ 将集合中数据取出按照对应格式显示学生信息,年龄显示补充“岁”
    4.3 调用方法
  5. 学生管理系统的删除学生功能实现步骤
    5.1 用键盘录入选择删除学生信息
    5.2 定义一个方法,用于删除学生信息
    ​ 显示提示信息
    ​ 键盘录入要删除的学生学号
    ​ 调用getIndex方法,查找该学号在集合的索引
    ​ 如果索引为-1,提示信息不存在
    ​ 如果索引不是-1,调用remove方法删除并提示删除成功
    5.3 调用方法
  6. 学生管理系统的修改学生功能实现步骤
    6.1 用键盘录入选择修改学生信息
    6.2 定义一个方法,用于修改学生信息
    ​ 显示提示信息
    ​ 键盘录入要修改的学生学号
    ​ 调用getIndex方法,查找该学号在集合的索引
    ​ 如果索引为-1,提示信息不存在
    ​ 如果索引不是-1,键盘录入要修改的学生信息
    ​ 集合修改对应的学生信息
    ​ 给出修改成功提示
    6.3 调用方法
  7. 退出系统
    使用System.exit(0);退出JVM

2.2 学生类的定义

package cn.whu.day09.studentManager;

public class Student {
private String sid;
private String name;
private Integer age;
private String birthday;

public Student() { }

public Student(String sid, String name, Integer age, String birthday) {
this.sid = sid;
this.name = name;
this.age = age;
this.birthday = birthday;
}

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 Integer getAge() {
return age;
}

public void setAge(Integer age) {
this.age = age;
}

public String getBirthday() {
return birthday;
}

public void setBirthday(String birthday) {
this.birthday = birthday;
}

@Override
public String toString() {
return sid +" \t " + name + " \t " + age +" \t " + birthday + " \t ";
}
}

2.3 测试类的定义

package cn.whu.day09.studentManager;

import org.omg.CORBA.INTERNAL;

import java.util.ArrayList;
import java.util.Scanner;

public class StudentManager {

//学生"数据库" 容器
public static ArrayList<Student> stuList = new ArrayList<Student>();

//给一些初始数据吧 方便测试
static {
stuList.add(new Student("101","管理1",18,"1998-01-01"));
stuList.add(new Student("102","管理2",19,"1999-01-01"));
}

public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
lo:
while(true){
//1. 搭建主界面
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("请输入您的选择:");

String choice = sc.next();//用String的好处 任何非法输入 都直接default处理

switch (choice){
case "1":
//System.out.println("添加学生");
addStudent();
break;
case "2":
//System.out.println("删除学生");
deleteStudent();
break;
case "3":
//System.out.println("修改学生");
updateStudent();
break;
case "4":
//System.out.println("查看学生");
queryStudents();
break;
case "5":
System.out.println("退出");
break lo; //直接跳出外层循环 从而退出整个系统 方便
default:
System.out.println("您的输入有误");
break;
}//switch
}//while
}//main

//添加学生
public static void addStudent(){
Scanner sc = new Scanner(System.in);

//注意学号不能重复
String sid,name,birthday;
Integer age;

//录入
while (true){
System.out.println("请输入学号:");
sid=sc.next();
if(hasSid(sid)){
System.out.println("该学号已经存在");
}else{
break;
}
}
System.out.println("请输入姓名:");
name=sc.next();
System.out.println("请输入年龄:");
age=sc.nextInt();
System.out.println("请输入生日:");
birthday=sc.next();

//封装数据并录入
stuList.add(new Student(sid,name,age,birthday));

System.out.println("添加成功!");
}

//容器里是否已有该id
public static boolean hasSid(String sid){
for (Student stu : stuList) {
if(stu.getSid().equals(sid)) return true;
}
return false;
}

//查看学生
public static void queryStudents(){
System.out.println("学号 \t 姓名 \t 年龄 \t 生日");
for (Student stu : stuList) {
System.out.println(stu);
}
}

//修改学生
public static void updateStudent( ){
Scanner sc = new Scanner(System.in);

System.out.println("请输入你要修改的学生学号:");
String sid = sc.next();

Integer idx = getIndexBySid(sid);
if(idx==-1){
System.out.println("查无此人~");
}else{
String name,birthday;
Integer age;
System.out.println("请输入要修改的姓名:");name=sc.next();
System.out.println("请输入要修改的年龄:");age=sc.nextInt();
System.out.println("请输入要修改的生日:");birthday=sc.next();
Student newStu = new Student(sid, name, age, birthday);
stuList.set(idx,newStu);//就为了练习这个方法
System.out.println("修改成功!");

}
}

//还是用一个sid查地址的方法吧 好多了
public static Integer getIndexBySid(String sid){
for (int i = 0; i < stuList.size(); i++) {
if(stuList.get(i).getSid().equals(sid)){
return i;
}
}
return -1;
}

public static void deleteStudent(){
Scanner sc = new Scanner(System.in);
System.out.println("请输入要删除学生的学号:");
String sid = sc.next();

int idx = getIndexBySid(sid);
if(idx==-1){//现在发现这个方法设计的是真滴好
System.out.println("删除失败,查无此人");
}else {
stuList.remove(idx);//多美啊
System.out.println("删除成功!");
}
}
}