自学Java第6Day

学习目标:

Java 在大三上已经学过一学期的面向对象,所以打算在一星期把面向对象复习完成。


学习内容:

集合ArrayList


学习时间:

下午 3 点-下午 6 点


学习产出:

集合存储数据类型的特点

  1. 类型多样性:‌集合可以存储任意引用数据类型的数据,‌这意味着集合中的元素可以是任何类的对象,‌包括自定义的类。‌这与数组不同,‌数组在定义后其元素类型是固定的,‌而集合则提供了更大的灵活性。‌

  2. 不支持基本数据类型:‌尽管集合支持泛型,‌即在编译阶段可以约束集合只能操作某种数据类型,‌但需要注意的是,‌集合和泛型都不支持直接存储基本数据类型(‌如int, double等)‌。‌如果需要在集合中存储基本类型的数据,‌必须使用对应的包装类(‌如Integer, Double等)‌,‌因为包装类属于引用数据类型。‌

     ArrayList<Integer> list = new ArrayList<>();
  3. 可变性:‌与数组相比,‌集合的大小是可变的。‌这意味着可以根据需要动态地添加或删除元素,‌而不需要预先定义数组的大小。‌这种特性使得集合在处理不确定数量的数据时更加灵活和高效。‌

  4. 功能强大:‌集合种类繁多,‌提供了丰富的功能和方法来操作集合中的元素,‌如添加、‌删除、‌查找、‌排序等。‌这些功能使得集合成为处理复杂数据结构的强大工具。‌

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:退出

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值