学习目标:
Java 在大三上已经学过一学期的面向对象,所以打算在一星期把面向对象复习完成。
学习内容:
集合ArrayList
学习时间:
下午 3 点-下午 6 点
学习产出:
集合存储数据类型的特点
-
类型多样性:集合可以存储任意引用数据类型的数据,这意味着集合中的元素可以是任何类的对象,包括自定义的类。这与数组不同,数组在定义后其元素类型是固定的,而集合则提供了更大的灵活性。
-
不支持基本数据类型:尽管集合支持泛型,即在编译阶段可以约束集合只能操作某种数据类型,但需要注意的是,集合和泛型都不支持直接存储基本数据类型(如int, double等)。如果需要在集合中存储基本类型的数据,必须使用对应的包装类(如Integer, Double等),因为包装类属于引用数据类型。
ArrayList<Integer> list = new ArrayList<>();
-
可变性:与数组相比,集合的大小是可变的。这意味着可以根据需要动态地添加或删除元素,而不需要预先定义数组的大小。这种特性使得集合在处理不确定数量的数据时更加灵活和高效。
-
功能强大:集合种类繁多,提供了丰富的功能和方法来操作集合中的元素,如添加、删除、查找、排序等。这些功能使得集合成为处理复杂数据结构的强大工具。
ArrayList成员方法
方法名 | 说明 |
boolean add(E e) | 添加元素,返回值表示是否添加成功 |
boolean remove(E e) | 删除指定元素,返回值表示是否删除成功 |
E remove(int index) | 删除指定索引的元素,返回被删除元素 |
E set(int index,E e) | 修改指定索引下的元素,返回原来的元素 |
E get(int index) | 获取指定索引的元素 |
int size() | 集合的长度,也就是集合中元素的个数 |
import java.util.ArrayList;
public class Demo2 {
public static void main(String[] args) {
ArrayList<String> list = new ArrayList<>();
//添加元素
boolean result=list.add("aaa");
list.add("bbb");
list.add("ccc");
list.add("ddd");
list.add("eee");
list.add("fff");
System.out.println(result);
System.out.println(list);
//删除元素
boolean result1=list.remove("aaa");
String str= list.remove(0);
System.out.println(result1);
System.out.println(str);
System.out.println(list);
//修改元素
String result2=list.set(0,"zzz");
System.out.println(result2);
System.out.println(list);
//查询元素
String result3=list.get(0);
System.out.println(result3);
//遍历
for (int i = 0; i < list.size(); i++) {
System.out.println(list.get(i));
}
}
}
练习:集合的遍历方式
需求:定义一个集合,添加字符串,并进行遍历
遍历格式参照:[元素1,元素2,元素3]
import java.util.ArrayList;
public class Demo3 {
public static void main(String[] args) {
ArrayList<String> list=new ArrayList<>();
list.add("点赞了吗?");
list.add("收藏了吗?");
list.add("投币了吗?");
list.add("转发了吗?");
System.out.print("[");
for (int i = 0; i < list.size(); i++) {
if(i==list.size()-1){
System.out.print(list.get(i)+"]");
break;
}
System.out.print(list.get(i)+",");
}
}
}
运行结果:
[点赞了吗?,收藏了吗?,投币了吗?,转发了吗?]
练习:添加数字并遍历
需求:定义一个集合,添加数字,并进行遍历
遍历格式参照:[元素1,元素2,元素3]
import java.util.ArrayList;
public class Demo4 {
public static void main(String[] args) {
ArrayList<Integer> list=new ArrayList<>();
//jdk5以后 int Integer 之间是可以相互转化的
list.add(1);
list.add(2);
list.add(3);
list.add(4);
list.add(5);
System.out.print("[");
for (int i = 0; i < list.size(); i++) {
if(i==list.size()-1){
System.out.print(list.get(i)+"]");
break;
}
System.out.print(list.get(i)+",");
}
}
}
运行结果:
[1,2,3,4,5]
基本数据类型对应的包装类
练习:添加学生对象并遍历
需求:定义一个集合,添加学生对象,并遍历
学生的属性为:姓名,年龄
import java.util.ArrayList;
import java.util.Scanner;
public class Demo5 {
public static void main(String[] args) {
Scanner scan=new Scanner(System.in);
//创建集合
ArrayList<Student> list=new ArrayList<>();
//创建学生对象
Student s1=new Student("张三",23);
Student s2=new Student("李四",24);
Student s3=new Student("王五",25);
//键盘录入一个学生信息
Student s4=new Student();
System.out.println("请输入姓名:");
String name=scan.next();
s4.setName(name);
System.out.println("请输入年龄:");
int age=scan.nextInt();
s4.setAge(age);
//添加元素
list.add(s1);
list.add(s2);
list.add(s3);
list.add(s4);
//遍历集合
for (int i = 0; i < list.size(); i++) {
Student stu=list.get(i);
System.out.println(stu.getName()+","+stu.getAge());
}
}
}
运行结果:
请输入姓名:
蛋姐
请输入年龄:
21
张三,23
李四,24
王五,25
蛋姐,21
练习:添加用户对象并判断是否存在
需求:
1.main方法中定义一个集合,存入三个用户对象。
用户属性为:id, username, password
2.要求:定义一个方法,根据id查找对应的用户信息。
如果存在,返回true
如果不存在,返回false
import java.util.ArrayList;
import java.util.Scanner;
public class Demo6 {
public static void main(String[] args) {
Scanner scan=new Scanner(System.in);
ArrayList<User> list=new ArrayList<>();
User u1=new User("001","张三","123456");
User u2=new User("002","李四","123456");
User u3=new User("003","蛋姐","123456");
list.add(u1);
list.add(u2);
list.add(u3);
System.out.println("请输入要查找的id:");
String id=scan.next();
System.out.println(contains(list,id));
}
public static int contains(ArrayList<User> list,String id){
for (int i = 0; i < list.size(); i++) {
User u=list.get(i);
String uid=u.getId();
if(uid.equals(id)){
return i;
}
}
return -1;
}
}
运行结果:
请输入要查找的id:
003
2
练习:添加手机对象并返回要求的数据
需求:
定义javabean类:Phone
Phone属性:品牌,价格。
main方法中定义一个集合,存入三个手机对象。
分别为:小米,1000、苹果,8000、锤子,2999。
定义一个方法,将价格低于3000的手机信息返回。
import java.util.ArrayList;
public class Demo7 {
public static void main(String[] args) {
ArrayList<Phone> list=new ArrayList<>();
Phone p1=new Phone("小米",1000);
Phone p2=new Phone("苹果",8000);
Phone p3=new Phone("锤子",2999);
list.add(p1);
list.add(p2);
list.add(p3);
ArrayList<Phone> phoneInfoList=getPhoneInfo(list);
for (int i = 0; i < phoneInfoList.size(); i++) {
Phone phone=phoneInfoList.get(i);
System.out.println(phone.getBrand()+","+phone.getPrice());
}
}
public static ArrayList<Phone> getPhoneInfo(ArrayList<Phone> list){
ArrayList<Phone> resultlist=new ArrayList<>();
for (int i = 0; i < list.size(); i++) {
Phone p=list.get(i);
int price=p.getPrice();
if(price<3000){
resultlist.add(p);
}
}
return resultlist;
}
}
运行结果:
小米,1000
锤子,2999
学生管理系统---万恶之源
需求:采取控制台的方式去书写学生管理系统。
分析:
初始菜单:
--------------欢迎来到学生管理系统----------------
1:添加学生
2:删除学生
3:修改学生
4:查询学生
5:退出
请输入您的选择:
学生类:
属性:id、姓名、年龄、家庭住址
添加功能:
键盘录入每一个学生信息并添加,需要满足以下要求:
id的唯一
删除功能:
键盘录入要删除的学生id,需要满足一下要求:
id存在删除
id不存在,需要提示不存在,并回到初始菜单
修改功能:
键盘录入要修改的学生id,需要满足以下要求:
id存在,继续录入其他信息
id不存在,需要提示不存在,并回到初始菜单
查询功能:
打印所有学生信息,需要满足以下要求
如果没有学生信息,提示:当前无学生信息,请添加后再查询
import java.util.ArrayList;
import java.util.Scanner;
public class StudentSystem {
public static void main(String[] args) {
ArrayList<Student> list=new ArrayList<>();
loop: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("请输入您的选择:");
Scanner scan=new Scanner(System.in);
String choose= scan.next();
switch (choose){
case "1"-> addStudent(list);
case "2"-> deleteStudent(list);
case "3"-> updeteStudent(list);
case "4"-> queryStudent(list);
case "5"-> {
System.out.println("5:退出");
break loop;
}
default -> System.out.println("没有这个选项");
}
}
}
//添加
public static void addStudent(ArrayList<Student> list){
Scanner scan=new Scanner(System.in);
String id= null;
while (true) {
System.out.println("请输入学生的ID:");
id = scan.next();
boolean flag=contains(list,id);
if(flag){
System.out.println("id已经存在");
}else {
break;
}
}
System.out.println("请输入学生的姓名:");
String name= scan.next();
System.out.println("请输入学生的年龄:");
int age=scan.nextInt();
System.out.println("请输入学生的家庭住址:");
String address=scan.next();
Student stu=new Student(id,name,age,address);
list.add(stu);
System.out.println("添加成功!");
}
//删除
public static void deleteStudent(ArrayList<Student> list){
Scanner scan=new Scanner(System.in);
System.out.println("请输入要删除的id");
String id=scan.next();
int index=getIndex(list,id);
if(index>=0){
list.remove(index);
System.out.println("id为"+id+"已删除!");
}else {
System.out.println("查无此人!");
}
}
//修改
public static void updeteStudent(ArrayList<Student> list){
Scanner scan=new Scanner(System.in);
System.out.println("请输入要修改的id");
String id= scan.next();
int index=getIndex(list,id);
if(index==-1){
System.out.println("要修改的id不存在!");
return;
}
Student stu=list.get(index);
System.out.println("请输入要修改的学生的姓名:");
String newname= scan.next();
stu.setName(newname);
System.out.println("请输入要修改的学生的年龄:");
int newage=scan.nextInt();
stu.setAge(newage);
System.out.println("请输入要修改的学生的家庭住址:");
String newaddress=scan.next();
stu.setAddress(newaddress);
System.out.println("学生信息修改完成!!");
}
//查询
public static void queryStudent(ArrayList<Student> list){
if(list.size()==0){
System.out.println("当前无学生!!!");
return;
}
System.out.println("id\t姓名\t年龄\t家庭住址");
for (int i = 0; i < list.size(); i++) {
Student stu=list.get(i);
System.out.println(stu.getId()+"\t"+stu.getName()+"\t"+stu.getAge()+"\t"+stu.getAddress());
}
}
//判断id唯一
public static boolean contains(ArrayList<Student> list,String id){
/*for (int i = 0; i < list.size(); i++) {
Student stu=list.get(i);
String uid=stu.getId();
if(uid.equals(id)){
return true;
}
}
return false;*/
return getIndex(list,id)>=0;
}
//通过id获取索引
public static int getIndex(ArrayList<Student> list,String id){
for (int i = 0; i < list.size(); i++) {
Student stu=list.get(i);
String sid=stu.getId();
if(sid.equals(id)){
return i;
}
}
return -1;
}
}
package xiangmu;
public class Student {
private String id;
private String name;
private int age;
private String address;
public Student() {
}
public Student(String id, String name, int age, String address) {
this.id = id;
this.name = name;
this.age = age;
this.address = address;
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
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 getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
}
运行结果:
--------------欢迎来到学生管理系统----------------
1:添加学生
2:删除学生
3:修改学生
4:查询学生
5:退出
请输入您的选择:
1
请输入学生的ID:
001
请输入学生的姓名:
旭哥
请输入学生的年龄:
21
请输入学生的家庭住址:
安徽
添加成功!
--------------欢迎来到学生管理系统----------------
1:添加学生
2:删除学生
3:修改学生
4:查询学生
5:退出
请输入您的选择:
1
请输入学生的ID:
002
请输入学生的姓名:
蛋姐
请输入学生的年龄:
21
请输入学生的家庭住址:
安徽
添加成功!
--------------欢迎来到学生管理系统----------------
1:添加学生
2:删除学生
3:修改学生
4:查询学生
5:退出
请输入您的选择:
1
请输入学生的ID:
003
请输入学生的姓名:
老毛
请输入学生的年龄:
23
请输入学生的家庭住址:
上海
添加成功!
--------------欢迎来到学生管理系统----------------
1:添加学生
2:删除学生
3:修改学生
4:查询学生
5:退出
请输入您的选择:
2
请输入要删除的id
3
查无此人!
--------------欢迎来到学生管理系统----------------
1:添加学生
2:删除学生
3:修改学生
4:查询学生
5:退出
请输入您的选择:
2
请输入要删除的id
003
id为003已删除!
--------------欢迎来到学生管理系统----------------
1:添加学生
2:删除学生
3:修改学生
4:查询学生
5:退出
请输入您的选择:
3
请输入要修改的id
1
要修改的id不存在!
--------------欢迎来到学生管理系统----------------
1:添加学生
2:删除学生
3:修改学生
4:查询学生
5:退出
请输入您的选择:
3
请输入要修改的id
001
请输入要修改的学生的姓名:
旭哥
请输入要修改的学生的年龄:
24
请输入要修改的学生的家庭住址:
乌鲁木齐
学生信息修改完成!!
--------------欢迎来到学生管理系统----------------
1:添加学生
2:删除学生
3:修改学生
4:查询学生
5:退出
请输入您的选择:
4
id 姓名 年龄 家庭住址
001 旭哥 24 乌鲁木齐
002 蛋姐 21 安徽
--------------欢迎来到学生管理系统----------------
1:添加学生
2:删除学生
3:修改学生
4:查询学生
5:退出
请输入您的选择:
5
5:退出