08-集合基础 简单体验下ArrayList
原创
©著作权归作者所有:来自51CTO博客作者武大保安的原创作品,请联系作者获取转载授权,否则将追究法律责任
文章目录
简单体验下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
}
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);
}
}
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;
}
}
2. 学生管理系统
2.1 学生管理系统实现步骤
- 案例需求
针对目前我们的所学内容,完成一个综合案例:学生管理系统!该系统主要功能如下:
添加学生:通过键盘录入学生信息,添加到集合中
删除学生:通过键盘录入要删除学生的学号,将该学生对象从集合中删除
修改学生:通过键盘录入要修改学生的学号,将该学生对象其他信息进行修改
查看学生:将集合中的学生对象信息进行展示
退出系统:结束程序 - 实现步骤
- 定义学生类,包含以下成员变量
学生类: Student成员变量:
学号:sid
姓名:name
年龄:age
生日:birthday
构造方法:
无参构造
带四个参数的构造成员方法:
每个成员变量对应给出get/set方法 - 学生管理系统主界面的搭建步骤
2.1 用输出语句完成主界面的编写
2.2 用Scanner实现键盘录入数据
2.3 用switch语句完成操作的选择
2.4 用循环完成再次回到主界面 - 学生管理系统的添加学生功能实现步骤
3.1 用键盘录入选择添加学生
3.2 定义一个方法,用于添加学生
显示提示信息,提示要输入何种信息
键盘录入学生对象所需要的数据
创建学生对象,把键盘录入的数据赋值给学生对象的成员变量
将学生对象添加到集合中(保存)
给出添加成功提示
3.3 调用方法 - 学生管理系统的查看学生功能实现步骤
4.1 用键盘录入选择查看所有学生信息
4.2 定义一个方法,用于查看学生信息
显示表头信息
将集合中数据取出按照对应格式显示学生信息,年龄显示补充“岁”
4.3 调用方法 - 学生管理系统的删除学生功能实现步骤
5.1 用键盘录入选择删除学生信息
5.2 定义一个方法,用于删除学生信息
显示提示信息
键盘录入要删除的学生学号
调用getIndex方法,查找该学号在集合的索引
如果索引为-1,提示信息不存在
如果索引不是-1,调用remove方法删除并提示删除成功
5.3 调用方法 - 学生管理系统的修改学生功能实现步骤
6.1 用键盘录入选择修改学生信息
6.2 定义一个方法,用于修改学生信息
显示提示信息
键盘录入要修改的学生学号
调用getIndex方法,查找该学号在集合的索引
如果索引为-1,提示信息不存在
如果索引不是-1,键盘录入要修改的学生信息
集合修改对应的学生信息
给出修改成功提示
6.3 调用方法 - 退出系统
使用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("删除成功!");
}
}
}