11.1 集合
集合和数组的对比:
长度:
数组长度固定
集合长度可变,自动扩容
存储类型:
数组可以存基本数据类型,可以引用数据类型
集合可以存引用数据类型,存基本数据类型时需要包装类1.1 ArrayList
ArrayList成员方法:
package com.yq.listdemo;
import java.util.ArrayList;
public class ArrayListDemo1 {
public static void main(String[] args) {
//1.创建集合的对象
// 泛型:限定集合中存储数据的类型
//ArrayList<String> list = new ArrayList<String>(); //JDK7之前的写法
/* 此处创建的是ArrayList的对象,而ArrayList是java中已经写好的类
这个类在底层做了一些处理,打印对象不是地址值,而是集合中存储的数据内容
在展示的时候会拿[]把所有的数据进行包裹
*/
ArrayList<String> list = new ArrayList<>(); //JDK7之后的写法
System.out.println(list);
}
}
package com.yq.listdemo;
import java.util.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() 获取长度
*/
public class ArrayListDemo2 {
public static void main(String[] args) {
//1.创建一个集合
ArrayList<String> list = new ArrayList<>();
//2.添加元素
list.add("aaa");
list.add("aaa");
list.add("bbb");
list.add("ccc");
//3.删除元素
/*
boolean result = list.remove("aaa");
System.out.println(result);
boolean result2 = list.remove("ddd");
System.out.println(result2);
String str = list.remove(2);
System.out.println(str);
*/
//修改元素
String result = list.set(1,"ddd"); //返回被修改前的元素信息
System.out.println(result);
//查询元素
String s = list.get(0);
System.out.println(s);
//遍历元素
for (int i = 0; i < list.size(); i++){
//i 以此表示索引
//list.get(i) 表示元素
String str = list.get(i);
System.out.println(str);
}
System.out.println(list);
}
}
1.2 集合练习
1.2.1 集合的遍历方式
package com.yq.test;
import java.util.ArrayList;
public class Test1 {
public static void main(String[] args) {
//1.创建集合
ArrayList<String> list = new ArrayList<>();
//2.添加元素
list.add("点赞了吗?");
list.add("收藏了吗?");
list.add("投币了吗?");
list.add("转发了吗?");
//3.遍历
System.out.print("[");
for (int i = 0; i < list.size(); i++){
if (i == list.size() - 1 ){
System.out.print(list.get(i));
} else {
System.out.print(list.get(i) + ", ");
}
}
System.out.println("]");
}
}1.2.2 添加数字并遍历
基本数据类型的包装类:
package com.yq.test;
import java.util.ArrayList;
public class Test2 {
public static void main(String[] args) {
//1.创建集合
ArrayList<Integer> list = new ArrayList<>();
//2.添加元素
//JDK5以后 int Integer 之间可以互相转化
list.add(1);
list.add(2);
list.add(3);
list.add(4);
list.add(5);
//3.遍历集合
System.out.print("[");
for (int i = 0; i < list.size(); i++){
if (i == list.size() - 1 ){
System.out.print(list.get(i));
} else {
System.out.print(list.get(i) + ", ");
}
}
System.out.println("]");
}
}
package com.yq.test;
import java.util.ArrayList;
public class Test3 {
public static void main(String[] args) {
ArrayList<Character> list = new ArrayList<>();
list.add('a');
list.add('b');
list.add('c');
System.out.println(list);
}
}
1.2.3 添加学生对象并遍历
//Student.java
package com.yq.test;
public class Student {
//1.私有化成员变量
//2.空参构造方法
//3.带全部参数的构造方法
//3.get/set方法
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;
}
}
//Test4.java
package com.yq.test;
import java.util.ArrayList;
public class Test4 {
public static void main(String[] args) {
//1.创建集合
ArrayList<Student> list = new ArrayList<>();
//2.创建学生对象
Student s1 = new Student("张三", 23);
Student s2 = new Student("李四", 24);
Student s3 = new Student("王五", 25);
//3.添加元素
list.add(s1);
list.add(s2);
list.add(s3);
//4.遍历集合
for (int i = 0; i < list.size(); i++) {
//i表示索引
//list.get(i) 表示 元素(学生对象)
Student stu = list.get(i);
System.out.println(stu.getName() + ", " + stu.getAge());
}
}
}
//Test5.java
package com.yq.test;
import java.util.ArrayList;
import java.util.Scanner;
public class Test5 {
public static void main(String[] args) {
//1.创建集合
ArrayList<Student> list = new ArrayList<>();
//刚创建的时候,若不向其中存入数据,则集合长度为0
//2.键盘录入学生的信息,并添加到集合当中
Scanner sc = new Scanner(System.in);
for (int i = 0; i < 3; i++) {
Student s = new Student();
System.out.println("请输入学生的姓名:");
String name = sc.next();
System.out.println("请输入学生的年龄:");
int age = sc.nextInt();
//将name和age赋值给学生对象
s.setName(name);
s.setAge(age);
//将学生对象存入集合
list.add(s);
}
System.out.println("集合元素个数为:" + list.size());
//3.循环遍历集合所有元素
for (int i = 0; i < list.size(); i++) {
Student stu = list.get(i);
System.out.println("姓名: " + stu.getName() + ", 年龄: " + stu.getAge() + ";");
}
}
}请输入学生的姓名:
张三
请输入学生的年龄:
23
请输入学生的姓名:
李四
请输入学生的年龄:
24
请输入学生的姓名:
王五
请输入学生的年龄:
25
集合元素个数为:3
姓名: 张三, 年龄: 23;
姓名: 李四, 年龄: 24;
姓名: 王五, 年龄: 25;
Process finished with exit code 01.2.4 查找用户是否存在
//User.java
package com.yq.test;
public class User {
private String id;
private String username;
private String password;
public User() {
}
public User(String id, String username, String password) {
this.id = id;
this.username = username;
this.password = password;
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
}//Test6.java
package com.yq.test;
/* 需求:
1.main方法中定义一个集合, 存入三个用户对象, 用户属性为: id username password
2.要求: 定义一个方法, 根据id查找对应的用户信息,
如果存在, 返回true
如果不存在, 返回false
*/
import java.util.ArrayList;
public class Test6 {
public static void main(String[] args) {
//1.创建集合
ArrayList<User> list = new ArrayList<>();
//2.创建三个用户对象
User u1 = new User("001", "zhangsan", "123456");
User u2 = new User("002", "lisi", "12345678");
User u3 = new User("003", "wangwu", "1234qwer");
//3.将用户对象添加到集合中
list.add(u1);
list.add(u2);
list.add(u3);
//4.调用方法检查id是否存在
boolean flag = contains(list,"001");
System.out.println(flag);
}
//1.要做什么 根据id查找用户
//2.需要什么才能完成 list id
//3.是否需要结果 返回
public static boolean contains(ArrayList<User> list, String id){
for (int i = 0; i < list.size(); i++){
//list.get(i).getId().equals(id);
User u = list.get(i);
String uid = u.getId();
if (uid.equals(id) ){
return true;
}
}
//当循环结束 集合中所有元素比较完毕都没有相同的 返回false
return false;
}
}//Test7.java
package com.yq.test;
/* 需求:
1.main方法中定义一个集合, 存入三个用户对象, 用户属性为: id username password
2.要求: 定义一个方法, 根据id查找对应的用户信息,
如果存在, 返回索引
如果不存在, 返回-1
*/
import java.util.ArrayList;
public class Test7 {
public static void main(String[] args) {
//1.创建集合
ArrayList<User> list = new ArrayList<>();
//2.创建三个用户对象
User u1 = new User("001", "zhangsan", "123456");
User u2 = new User("002", "lisi", "12345678");
User u3 = new User("003", "wangwu", "1234qwer");
//3.将用户对象添加到集合中
list.add(u1);
list.add(u2);
list.add(u3);
//4.调用方法检查id是否存在
int index = getIndex(list,"001");
System.out.println(index);
boolean flag = contains(list, "001");
System.out.println(flag);
}
//1.要做什么 根据id查找用户
//2.需要什么才能完成 list id
//3.是否需要结果 返回
public static int getIndex(ArrayList<User> list, String id){
for (int i = 0; i < list.size(); i++){
//list.get(i).getId().equals(id);
User u = list.get(i);
String uid = u.getId();
if (uid.equals(id) ){
return i;
}
}
//当循环结束 集合中所有元素比较完毕都没有相同的 返回false
return -1;
}
public static boolean contains(ArrayList<User> list, String id){
return getIndex(list,id) >= 0;
}
}1.2.5 添加手机对象并返回要求的数据
package com.yq.test;
public class Phone {
private String brand;
private int price;
public Phone() {
}
public Phone(String brand, int price) {
this.brand = brand;
this.price = price;
}
public String getBrand() {
return brand;
}
public void setBrand(String brand) {
this.brand = brand;
}
public int getPrice() {
return price;
}
public void setPrice(int price) {
this.price = price;
}
}package com.yq.test;
import java.util.ArrayList;
public class Test8 {
public static void main(String[] args) {
//1.创建集合对象
ArrayList<Phone> list = new ArrayList<>();
//2.创建手机对象
Phone p1 = new Phone("小米", 1000);
Phone p2 = new Phone("苹果", 8000);
Phone p3 = new Phone("锤子", 2999);
//3.添加数据
list.add(p1);
list.add(p2);
list.add(p3);
//4.调用方法
ArrayList<Phone> phoneInfoList = getPhoneInfo(list);
//5.遍历集合
for (int i = 0; i < phoneInfoList.size(); i++) {
Phone phone = phoneInfoList.get(i);
System.out.println(phone.getBrand() + ", " + phone.getPrice());
}
}
//1.要做什么 查询手机信息
//2.需要什么 list
//3.是否需要返回 返回
// 技巧:
// 如果我们需要返回多个数据 , 可以将这些数据先放到一个容器中,再将容器返回
public static ArrayList<Phone> getPhoneInfo(ArrayList<Phone> list){
//定义一个集合 用于存储价格低于3000 的手机对象
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){
//System.out.println(p.getBrand() +","+ p.getPrice());
//如果当前手机价格低于3000 那么将手机对象添加到resultList
resultList.add(p);
}
}
return resultList;
}
}11.2 学生管理系统
学生管理系统的需求文档.md
## 学生管理系统
### 需求:
采取控制台的方式去书写学生管理系统。
### 分析:
#### 初始菜单:
```java
"-------------欢迎来到黑马学生管理系统----------------"
"1:添加学生"
"2:删除学生"
"3:修改学生"
"4:查询学生"
"5:退出"
"请输入您的选择:"
```
#### 学生类:
属性:id、姓名、年龄、家庭住址
#### 添加功能:
键盘录入每一个学生信息并添加,需要满足以下要求:
* id唯一
#### 删除功能:
键盘录入要删除的学生id,需要满足以下要求:
* id存在删除
* id不存在,需要提示不存在,并回到初始菜单
#### 修改功能:
键盘录入要修改的学生id,需要满足以下要求
* id存在,继续录入其他信息
* id不存在,需要提示不存在,并回到初始菜单
#### 查询功能:
打印所有的学生信息,需要满足以下要求
* 如果没有学生信息,提示:当前无学生信息,请添加后再查询
* 如果有学生信息,需要按照以下格式输出。(不用过于纠结对齐的问题)
```java
id 姓名 年龄 家庭住址
heima001 张三 23 南京
heima002 李四 24 北京
heima003 王五 25 广州
heima004 赵六 26 深圳
```

//Student.java
package com.yq.studentsystem;
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;
}
}//StudentSystem.java
package com.yq.studentsystem;
import javax.naming.Name;
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.退出");
Scanner sc = new Scanner(System.in);
String choose = sc.next();
switch (choose){
case "1" -> addStudent(list);
case "2" -> deleteStudent(list);
case "3" -> updateStudent(list);
case "4" -> queryStudent(list);
case "5" -> {
System.out.println("退出");
//break; //只能跳出单层循环 此处只能跳出switch
//break loop; //方法1 用loop标记
System.exit(0); //方法2 停止虚拟机运行
}
default -> System.out.println("没有这个选项");
}
}
}
//添加学生
public static void addStudent(ArrayList<Student> list){
//System.out.println("添加学生");
//利用空参构造学生对象
Student s = new Student();
Scanner sc = new Scanner(System.in);
String id = null;
while (true){
System.out.println("输入学生的id");
id = sc.next();
boolean flag = contains(list,id);
if (flag){
System.out.println("id已经存在, 重新输入");
} else {
s.setId(id);
break;
}
}
System.out.println("输入学生的姓名");
String name = sc.next();
s.setName(name);
System.out.println("输入学生的年龄");
int age = sc.nextInt();
s.setAge(age);
System.out.println("输入学生的家庭住址");
String address = sc.next();
s.setAddress(address);
//将学生对象添加到集合中
list.add(s);
System.out.println("-----学生信息添加成功-----");
}
//删除学生
public static void deleteStudent(ArrayList<Student> list){
//System.out.println("删除学生");
Scanner sc = new Scanner(System.in);
System.out.println("请输入需要删除的学生id");
String id = sc.next();
int index = getIndex(list,id);
if(index >= 0){
list.remove(index);
System.out.println("id为: " + id + "的学生删除成功");
} else {
System.out.println("id不存在 删除失败");
}
}
//修改学生
public static void updateStudent(ArrayList<Student> list){
//System.out.println("修改学生");
Scanner sc = new Scanner(System.in);
System.out.println("请输入需要修改的学生id");
String id = sc.next();
int index = getIndex(list,id);
if (index >=0 ){
Student s = list.get(index);
System.out.println("输入学生的姓名");
String name = sc.next();
s.setName(name);
System.out.println("输入学生的年龄");
int age = sc.nextInt();
s.setAge(age);
System.out.println("输入学生的家庭住址");
String address = sc.next();
s.setAddress(address);
System.out.println("-----学生信息修改成功-----");
} else {
System.out.println("id不存在 修改失败");
}
}
//查询学生
public static void queryStudent(ArrayList<Student> list){
//System.out.println("查询学生");
if (list.size() == 0){
System.out.println("当前学生信息, 请添加后再查询");
return;
}
System.out.println("id\t\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){
//循环遍历集合,得到每一个学生对象,拿到学生id后进行判断
//存在 ture ; 不存在 false
/*for (int i = 0; i < list.size(); i++) {
Student stu = list.get(i);
String sid = stu.getId();
if (sid.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(); //得到学生的id
if(sid.equals(id)){
return i; //判断id是否一样 如果一样,则返回索引
}
}
return -1;
}
}
评论区