文章目录
一、集合
1.集合和数组的对比
(1)长度
数组长度固定;
集合长度可变。
(2)存储类型
数组既可以存引用数据类型,也可以存基本数据类型;
集合能存引用数据类型,不能存基本数据类型,除非把基本数据类型变成包装类,才可以存储。
2.ArrayList
(1)导包
import java.util.ArrayList;
(2)泛型
可以是引用数据类型,不能是基本数据类型。
//JDK7以前
ArrayList<String> list = new ArrayList<String>();
//JDK7以后
ArrayList<String> list = new ArrayList<>();
(3)打印
System.out.println(list);
创建的是ArrayList的对象,ArrayList是Java已经写好的一个类,这个类在底层做了一些处理:
打印对象不是地址值,而是集合中存储的数据内容,并且会由[]括起来。
(4)成员方法
增删改查
方法名 | 说明 |
---|---|
boolean add(E e) | 添加元素,返回值表示是否添加成功 |
boolean remove(E e) | 删除指定元素,返回值表示是否删除成功 |
E remove(int index) | 删除指定索引的元素,返回被删除元素 |
E set(int index,E e) | 修改指定索引下的元素,返回原来的元素 |
E get(int index) | 获取指定索引的元素 |
int size() | 集合的长度,也就是集合中元素的个数 |
遍历
list.fori + 回车
for(int i = 0;i < list.size();i++){
System.out.println(list.get(i));
}
(5)练习
集合的遍历方式
需求:定义一个集合,添加字符串,并进行遍历
遍历格式参照:[元素1,元素2,元素3]。
import java.util.ArrayList;
public class Demo1{
public static void main(String[] args){
ArrayList<String> list = new ArrayList<>();
list.add("aaa");//思考:能不能键盘录入添加?
list.add("bbb");
list.add("ccc");
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("]");
}
}
添加数字并遍历
基本数据类型 | 对应的包装类 |
---|---|
byte | Byte |
short | Short |
char | Character |
int | Integer |
long | Long |
flost | Float |
double | Double |
boolean | Boolean |
需求:定义一个集合,添加数字,并进行遍历。
遍历格式参照:[元素1,元素2,元素3]。
import java.util.ArrayList;
public class Demo2{
public static void main(String[] args){
ArrayList<Integer> list = new ArrayList<>();
list.add(1);
list.add(2);
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("]");
}
}
添加学生对象并遍历
基础
需求:定义一个集合,添加一些学生对象,并进行遍历。
学生类的属性为:姓名、年龄。
//JavaBean类
public class Student{
private String name;
private int age;
public Student(){
}
public Student(String name,int age){
this.name = name;
this.age = age;
}
public static void setName(String name){
this.name = name;
}
public String getName(){
return name;
}
public static void setAge(int age){
if(age > 0){
this.age = age;
}else{
System.out.println("年龄输入错误");
}
public String getAge(){
return age;
}
}
}
//测试类
import java.util.ArrayList;
public class StudentText{
public static void main(String[] args){
ArrayList<Student> list = new ArrayList<>();
Student s1 = new Student("张三",23);
Student s2 = new Student("李四",24);
Student s3 = new Student("王五",25);
list.add(s1);
list.add(s2);
list.add(s3);
for(int i = 0;i < list.size();i++){
System.out.println("姓名为:" + list.get(i).getName() + " 年龄为:" + list.get(i).getAge());
}
}
}
数据来自键盘录入
import java.util.ArrayList;
import java.util.Scanner;
public class StudentText{
public static void main(String[] args){
Scanner sc = new Scanner(System.in);
ArrayList<Student> list = new ArrayList<>();
System.out.println("请输入待输入学生的个数");
int n = sc.nextInt();
for(int i = 0;i < n;i++) {
/*先调用空参构造方法在循环中定义一个Student对象;
再根据键盘录入的值,通过set方法对对象的成员变量进行赋值;
最后把该对象添加到集合list中*/
Student stu = new Student();
/*不要把创建学生对象写在循环外面,
不然,set方法赋值给的是同一个学生对象,
add的也是同一个地址;
要每循环一次,创建一个新的学生对象,才有不同的地址
System.out.println("请输入姓名");
stu.setName(sc.next());
System.out.println("请输入年龄");
stu.setAge(sc.nextInt());
list.add(stu);
}
for(int i = 0;i < list.size();i++){
System.out.println("姓名为:" + list.get(i).getName() + " 年龄为:" + list.get(i).getAge());
}
}
}
//注意:一开始集合中没有元素,长度为0,所以循环根本进不去
for(int i = 0;i < list.size();i++){
Student s = new Student();
list.add(s);
}
添加用户对象并判断是否存在
基础
需求:
1.main方法中定义一个集合,存入三个用户对象
用户属性:id、username、password
2.要求:定义一个方法,根据id查找对应的用户信息
如果存在,返回true
如果不存在,返回false
//JavaBean类
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 void setId(String id){
this.id = id;
}
public String getId(){
return id;
}
public void setUsername(String username){
this.username = username;
}
public String getUsername(){
return username;
}
public void setPassword(String password){
this.password = password;
}
public String getPassword(){
return password;
}
}
//测试类
import java.util.ArrayList;
import java.util.Scanner;
public class UserText{
public static void main(String[] args){
Scanner sc = new Scanner(System.in);
ArrayList<User> list = new ArrayList<>();
User u1 = new User("1","张三","1234");
User u2 = new User("2","李四","1234");
User u3 = new User("3","王五","1234");
list.add(u1);
list.add(u2);
list.add(u3);
System.out.println("请输入待查找用户的ID");
String id = sc.next();
if(isUserExist(list,id)){
System.out.println("该用户存在");
}else {
System.out.println("该用户不存在");
}
}
public static boolean isUserExist(ArrayList<User> list,String id){
for(int i = 0;i < list.size();i++){
if(list.get(i).getId().equals(id)){
return true;
}
}
return false;
}
}
变形
需求:
1.main方法中定义一个集合,存入三个用户对象
用户属性:id、username、password
2.要求:定义一个方法,根据id查找对应的用户信息
如果存在,返回索引
如果不存在,返回-1
//JavaBean类
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 void setId(String id){
this.id = id;
}
public String getId(){
return id;
}
public void setUsername(String username){
this.username = username;
}
public String getUsername(){
return username;
}
public void setPassword(String password){
this.password = password;
}
public String getPassword(){
return password;
}
}
//测试类
import java.util.ArrayList;
import java.util.Scanner;
public class UserText{
public static void main(String[] args){
Scanner sc = new Scanner(System.in);
ArrayList<User> list = new ArrayList<>();
User u1 = new User("1","张三","1234");
User u2 = new User("2","李四","1234");
User u3 = new User("3","王五","1234");
list.add(u1);
list.add(u2);
list.add(u3);
System.out.println("请输入待查找用户的ID");
String id = sc.next();
int index = isUserExist(list,id);
if(index != -1){
System.out.println("用户ID:" + list.get(index).getId() + " 用户名:" + list.get(index).getUsername() + " 用户密码:" + list.get(index).getPassword());
}else {
System.out.println("该用户不存在");
}
}
public static int isUserExist(ArrayList<User> list,String id){
for(int i = 0;i < list.size();i++){
if(list.get(i).getId().equals(id)){
return i;
}
}
return -1;
}
}
添加手机对象并返回要求的数据
需求:
定义JavaBean类:Phone
Phone属性:品牌、价格
main方法中定义一个集合,存入三个手机对象
分别为:小米,1000;苹果,8000;锤子,2999。
定义一个方法,将价格低于3000的手机信息返回。
public class Phone{
private String brand;
private int price;
public Phone(){
}
public Phone(String brand,int price){
this.brand = brand;
this.price = price;
}
public void setBrand(String brand){
this.brand = brand;
}
public String getBrand(){
return brand;
}
public void setPrice(int price){
this.price = price;
}
public int getPrice(){
return price;
}
}
import java.util.ArrayList;
public class PhoneText{
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> resultlist = search(list,3000);
for (int i = 0; i < resultlist.size(); i++) {//不能直接打印集合
System.out.println("品牌:" + resultlist.get(i).getBrand() + " 价格为:" + resultlist.get(i).getPrice()) ;
}
}
public static ArrayList<Phone> search(ArrayList<Phone> list,int max){
ArrayList<Phone> resultlist = new ArrayList<>();
int count = 0;
for(int i = 0;i < list.size();i++){
if(list.get(i).getPrice() < 3000){
resultlist.add(list.get(i));
}
}
return resultlist;
}
}
二、学生管理系统
1.需求
初始菜单:
“------------欢迎来到黑马学生管理系统------------”
“1:添加学生”
“2:删除学生”
“3:修改学生”
“4:查询学生”
“5:退出”
“请输入你的选择:”
学生类:
属性:id、姓名、年龄、家庭住址
添加功能:
键盘录入每一个学生信息并添加,需要满足一下要求:
id唯一
删除功能:
键盘录入要删除的学生id,需要满足以下要求:
id存在删除
id不存在,需要提示不存在,并回到初始菜单
修改功能:
打印所有的学生信息,需要满足以下要求:
如果没有学生信息,提示:当前无学生信息,请添加后再查询
查询功能:
打印所有的学生信息,需要满足以下要求:
如果没有学生信息,提示:当前无学生信息,请添加后再查询
如果有学生信息,需要按照以下格式输出。(不用过于纠结对齐的问题)
id 姓名 年龄 家庭住址
heima001 张三 23 南京
heima002 李四 24 北京
heima003 王五 25 广州
heima004 赵六 26 深圳
2.代码实现
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 void setId(String id){
this.id = id;
}
public String getId(){
return id;
}
public void setName(String name){
this.name = name;
}
public String getName(){
return name;
}
public void setAge(int age){
if(age > 0){
this.age = age;
}else {
System.out.println("年龄输入错误");
}
}
public int getAge(){
return age;
}
public void setAddress(String address) {
this.address = address;
}
public String getAddress(){
return address;
}
}
import java.util.ArrayList;
import java.util.Scanner;
public class StudentText{
public static void main(String[] args){
Scanner sc = new Scanner(System.in);
ArrayList<Student> list = new ArrayList<>();
Student s1 = new Student("heima001","张三",23,"南京");
Student s2 = new Student("heima002","李四",24,"北京");
Student s3 = new Student("heima003","王五",25,"广州");
Student s4 = new Student("heima004","赵六",26,"深圳");
list.add(s1);
list.add(s2);
list.add(s3);
list.add(s4);
String a;
loop:while(true){//loop循环
System.out.println("----------学生管理系统----------");
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("------------------------------");
System.out.println("---------请输入你的选择---------");
a = sc.next();//(容错)当输入别的内容,不会报错
switch(a){
case "1" -> list = addStudent(list);
case "2" -> list = deleteStudent(list);
case "3" -> list = alterStudent(list);
case "4" -> searchStudent(list);
case "5" -> {
System.out.println("退出成功");
break loop;//跳出loop循环
//或者写:(相当于直接差掉IDEA)
//System.exit(0);
}
default -> System.out.println("没有这个选项");
}
}
}
public static ArrayList<Student> addStudent(ArrayList<Student> list){
Scanner sc = new Scanner(System.in);
System.out.println("请输入添加的学生个数");
int n = sc.nextInt();
for(int i = 0;i < n;i++) {
Student s = new Student();
System.out.println("请输入学生ID");
String tmp = sc.next();
if(isExist(list,tmp)){
System.out.println("该学号已有,添加失败");
} else{
s.setId(tmp);
System.out.println("请输入学生姓名");
s.setName(sc.next());
System.out.println("请输入学生年龄");
s.setAge(sc.nextInt());
System.out.println("请输入学生家庭住址");
s.setAddress(sc.next());
list.add(s);
System.out.println("添加成功");
}
}
return list;
}
public static ArrayList<Student> deleteStudent(ArrayList<Student> list){
Scanner sc = new Scanner(System.in);
System.out.println("请输入要删除的学生学号");
String sid = sc.next();
for (int i = 0; i < list.size(); i++) {
if(list.get(i).getId().equals(sid)){
System.out.println("学号为" + sid + "的学生,姓名为:" + list.get(i).getName() + ",年龄为:" + list.get(i).getAge() + ",家庭住址为:" + list.get(i).getAddress());
list.remove(i);
System.out.println("删除成功");
return list;
}
}
System.out.println("该学生不存在");
return list;
}
public static ArrayList<Student> alterStudent(ArrayList<Student> list){
Scanner sc = new Scanner(System.in);
System.out.println("请输入要修改的学生ID");
String sid = sc.next();
boolean flag = true;
for(int i = 0;i <list.size();i++) {
if(list.get(i).getId().equals(sid)){
System.out.println("----------修改学生信息----------");
System.out.println("------------------------------");
System.out.println("-----------1.修改姓名----------");
System.out.println("-----------2.修改年龄----------");
System.out.println("-----------3.修改家庭住址-------");
System.out.println("-----------4.退出修改-----------");
System.out.println("------------------------------");
System.out.println("---------请输入你的选择---------");
switch(sc.next()){
case "1" -> {
System.out.println("请输入修改后的学生姓名");
String tmp = sc.next();
if(tmp.equals(list.get(i).getName())){
System.out.println("输入的年龄与已有年龄相同,修改失败");
} else{
list.get(i).setName(tmp);
System.out.println("修改成功");
}
flag = false;
}
case "2" -> {
System.out.println("请输入修改后的学生年龄");
int tmp = sc.nextInt();
if(tmp == list.get(i).getAge()){
System.out.println("输入的年龄与已有年龄相同,修改失败");
} else{
list.get(i).setAge(tmp);
System.out.println("修改成功");
}
flag = false;
}
case "3" -> {
System.out.println("请输入修改后的学生家庭住址");
String tmp = sc.next();
if(tmp.equals(list.get(i).getAddress())){
System.out.println("输入的家庭住址与已有家庭住址相同,修改失败");
} else{
list.get(i).setAddress(tmp);
System.out.println("修改成功");
}
flag = false;
}
case "4" -> {
System.out.println("回到了主菜单");
return list;
}
default -> {
System.out.println("没有该选项");
flag = false;
}
}
}
}
if(flag == true){
System.out.println("该学生不存在");
}
return list;
}
public static void searchStudent(ArrayList<Student> list){
if(list.size() == 0){
System.out.println("当前无学生信息,请添加后再查询");
} else{
System.out.println("id" + "姓名" + "年龄" + "家庭住址" );
for (int i = 0; i < list.size(); i++) {
System.out.println(list.get(i).getId() + list.get(i).getName() + list.get(i).getAge() + list.get(i).getAddress());
}
}
}
public static boolean isExist(ArrayList<Student> list,String sid){
for (int i = 0; i < list.size(); i++) {
if (list.get(i).getId().equals(sid)) {
return true;
}
}
return false;
}
}