13-JavaSE基础巩固练习:ArrayList集合的练习

集合综合练习

1、集合的遍历方式
  • 需求

    • 定义一个集合,添加字符串,并进行遍历。
    • 遍历格式参照:
      • [元素1, 元素2, 元素3]
  • 分析

    • 需要一个集合,类型是字符串,用于存储字符串类型的元素。
    • 需要添加一些元素进集合中。
    • 需要遍历集合,依次获取每个元素并按照指定格式输出。
  • 实现

    package com.app.demo22_array_list;
    
    import java.util.ArrayList;
    
    /*
        集合综合练习:集合的遍历方式
            需求:
                定义一个集合,添加字符串,并进行遍历。
                遍历格式参照:
                  [元素1, 元素2, 元素3]
     */
    public class ArrayListDemo1 {
        public static void main(String[] args) {
            // 1、定义一个字符串类型的集合,用于存储一些字符串类型的数据
            ArrayList<String> list = new ArrayList<>();
    
            // 2、往集合里添加数据
            list.add("你真是老6");
            list.add("Hello World!");
            list.add("甄姬");
    
            // 3、遍历集合
            System.out.print("[");
            for (int i = 0; i < list.size(); i++) {
                System.out.print(i == list.size() - 1 ? list.get(i) + "]\n" : list.get(i) + ", ");
            }
        }
    }
    
    [你真是老6, Hello World!, 甄姬]
    
    Process finished with exit code 0
    
    


2、添加数字并遍历
  • 需求

    • 定义一个集合,添加数字,并进行遍历。
    • 遍历格式参照:
      • [元素1, 元素2, 元素3]
  • 分析

    • 需要定义Integer类型、Double类型的集合,用于存储数字数据。
    • 需要添加一些元素进集合中。
    • 需要遍历集合,查看集合所有元素。
  • 实现

    package com.app.demo22_array_list;
    
    import java.util.ArrayList;
    
    /*
        集合综合练习:添加数字并遍历
            需求:
                定义一个集合,添加数字,并进行遍历。
                遍历格式参照:
                    [元素1, 元素2, 元素3]
     */
    public class ArrayListDemo2 {
        public static void main(String[] args) {
            // 1、定义Integer类型、Double类型的集合,用于存储数字数据
            ArrayList<Integer> numbers = new ArrayList<>();
            ArrayList<Double> scores = new ArrayList<>();
    
            // 2、添加整数进numbers集合
            numbers.add(12);
            numbers.add(45);
            numbers.add(22);
            numbers.add(1000);
            numbers.add(9);
    
            // 3、添加小数进scores集合
            scores.add(66.5);
            scores.add(100.0);
            scores.add(99.5);
            scores.add(59.5);
    
            // 4、遍历集合,查看集合所有元素
            System.out.print("numbers: [");
            for (int i = 0; i < numbers.size(); i++) {
                System.out.print(i == numbers.size() - 1 ? numbers.get(i) + "]\n" : numbers.get(i) + ", ");
            }
    
            System.out.print("scores: [");
            for (int i = 0; i < scores.size(); i++) {
                System.out.print(i == scores.size() - 1 ? scores.get(i) + "]\n" : scores.get(i) + ", ");
            }
        }
    }
    
    numbers: [12, 45, 22, 1000, 9]
    scores: [66.5, 100.0, 99.5, 59.5]
    
    Process finished with exit code 0
    
    


3、添加学生对象并遍历
  • 需求

    • 定义一个集合,添加一些学生对象,并进行遍历。
    • 学生类的属性为:
      • 姓名、年龄。
  • 分析

    • 需要一个学生类对象,用于将学生信息封装成一个学生对象。
    • 需要一个学生对象类型的集合,用于存储每个学生对象。
    • 需要遍历集合,查看所有学生对象的信息。
  • 实现

    package com.app.demo23_array_list_custom_type;
    
    /*
        学生类
     */
    public class Student {
        // 定义学生属性:姓名、年龄
        private String name;
        private int age;
    
        // 有参、无参构造器
        public Student() {
    
        }
        public Student(String name, int age) {
            this.name = name;
            this.age = age;
        }
    
        // 提供全套的getXXX和setXXX方法,暴露其属性的取值和赋值
        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;
        }
    
        // 重写toString,格式化输出学生对象的属性值
        @Override
        public String toString() {
            return "Student{" +
                    "name='" + name + '\'' +
                    ", age=" + age +
                    '}';
        }
    }
    
    package com.app.demo23_array_list_custom_type;
    
    import java.util.ArrayList;
    import java.util.Scanner;
    
    /*
        集合综合练习:添加学生对象并遍历
            需求:
              定义一个集合,添加一些学生对象,并进行遍历。
              学生类的属性为:
                 姓名、年龄。
     */
    public class StudentTest {
        public static void main(String[] args) {
            // 1、定义一个学生对象类型的集合,用于存储学生对象
            ArrayList<Student> students = new ArrayList<>();
    
            // 2、创建学生对象,并添加进students集合中
            addStudent(students);
    
            // 3、遍历students集合,查看所有学生对象的信息
            showStudents(students);
        }
    
    
    
        /**
         * 添加学生信息
         *
         * @param students      学生对象集合
         */
        public static void addStudent(ArrayList<Student> students) {
            // 1、判断students是否为null
            if (students == null) {
                System.out.println("您的学生对象集合为null~");
                return;
            }
    
            System.out.println("--------录入学生信息界面--------");
            // 2、从键盘录入学生信息:姓名、年龄
            Scanner sc = new Scanner(System.in);
            System.out.println("请您录入学生的姓名:");
            String name = sc.next();
            System.out.println("请您录入学生的年龄:");
            int age = sc.nextInt();
    
            // 3、将从键盘录入的学生信息封装成学生对象并添加到集合中
            students.add(new Student(name, age));
            System.out.println("学生" + name + "的信息已成功录入!");
    
            // 4、问一下是否还要继续录入学生信息
            isContinue(students, sc);
        }
    
    
        /**
         * 问一下是否要继续录入
         *
         * @param students      学生对象集合
         * @param sc            键盘录入对象
         */
        public static void isContinue(ArrayList<Student> students, Scanner sc) {
            // 1、判断sc是否为null
            if (sc == null) {
                System.out.println("您的键盘录入对象为null~");
                return;
            }
    
            // 2、问一下是否要继续录入
            System.out.println("您是否还要继续录入?(yes/no):");
            String command = sc.next();
            switch (command) {
                case "yes":
                    // 输入的是yes,回调addStudent方法,继续录入
                    addStudent(students);
                    break;
                default:
                    // 输入的是其他,结束录入
                    System.out.println("好的!");
                    break;
            }
        }
    
    
        /**
         * 查看所有学生对象的信息
         *
         * @param students   学生对象集合
         */
        public static void showStudents(ArrayList<Student> students) {
            // 2、遍历students集合,依次获取集合中的每个学生对象
            System.out.println("\n学生信息如下:");
            for (Student student : students) {
                // 依次查看学生对象信息
                System.out.println("姓名:" + student.getName() + "\t" + "年龄:" + student.getAge() + "岁");
            }
        }
    }
    
    --------录入学生信息界面--------
    请您录入学生的姓名:
    张飞
    请您录入学生的年龄:
    29
    学生张飞的信息已成功录入!
    您是否还要继续录入?(yes/no):
    yes
    --------录入学生信息界面--------
    请您录入学生的姓名:
    关羽
    请您录入学生的年龄:
    30
    学生关羽的信息已成功录入!
    您是否还要继续录入?(yes/no):
    yes
    --------录入学生信息界面--------
    请您录入学生的姓名:
    甄姬
    请您录入学生的年龄:
    24
    学生甄姬的信息已成功录入!
    您是否还要继续录入?(yes/no):
    no
    好的!
    
    学生信息如下:
    姓名:张飞	年龄:29岁
    姓名:关羽	年龄:30岁
    姓名:甄姬	年龄:24岁
    
    Process finished with exit code 0
    
    


4、添加用户对象并判断是否存在
  • 需求

    • 定义一个集合,存入三个用户对象。
    • 用户属性为:id、username、password
    • 定义一个方法,根据id查找对应的用户信息:
      • 如果存在,返回true。
      • 如果不存在,返回false。
  • 分析

    • 需要一个用户类对象,用于将录入的用户信息封装成一个用户对象。
    • 需要一个用户类型的集合,用于存储用户对象。
    • 需要一个方法,根据id查找对应的用户信息:
      • 如果存在,返回true,否则返回false。
  • 实现

    package com.app.demo23_array_list_custom_type;
    
    /*
        用户类
     */
    public class User {
        // 定义用户属性:id、用户名、密码
        private String id;
        private String name;
        private String password;
    
        // 提供有参、无参数构造器
        public User() {
        }
    
        public User(String id, String name, String password) {
            this.id = id;
            this.name = name;
            this.password = password;
        }
    
        // 提供全套的get、set方法,暴露其属性的取值和赋值
        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 String getPassword() {
            return password;
        }
    
        public void setPassword(String password) {
            this.password = password;
        }
    
    
        /*
            重写toString方法,格式化输出用户对象的信息
         */
        @Override
        public String toString() {
            return "User{" +
                    "id='" + id + '\'' +
                    ", name='" + name + '\'' +
                    ", password='" + password + '\'' +
                    '}';
        }
    }
    
    package com.app.demo23_array_list_custom_type;
    
    import java.util.ArrayList;
    import java.util.Scanner;
    
    /*
        集合综合练习:添加用户对象并判断是否存在
            需求:
               定义一个集合,存入三个用户对象。
               用户属性为:id、username、password
               定义一个方法,根据id查找对应的用户信息:
                  如果存在,返回true。
                  如果不存在,返回false。
     */
    public class UserTest {
        public static void main(String[] args) {
            // 1、定义集合,类型为用户对象,用于存储用户对象
            ArrayList<User> users = new ArrayList<>();
    
            // 2、添加用户:从键盘录入用户信息,封装成用户对象并添加到集合中
            addUsers(users);
    
            // 3、查看所有用户信息
            showUsers(users);
    
            /*
              4、查询指定用户是否存在:
                从键盘录入用户的id,根据该id查询该用户是否存在集合中?
                存在返回true,否则返回false
             */
            // 输入要查询的用户的id
            System.out.println("------根据id查询用户是否存在------");
            Scanner sc = new Scanner(System.in);
            System.out.println("请您输入要查询的用户的id:");
            String inputId = sc.next();
            // 根据输入的id,判断该用户是否存在
            boolean flag = isExist(users, inputId);
            System.out.println("id为" + inputId + "的用户是否存在:" + flag);
        }
    
    
        /**
         * 根据id查询用户
         *
         * @param users     用户对象集合
         * @param inputId   要查询的用户id
         * @return          用户存在返回true,否则返回false
         */
        public static boolean isExist(ArrayList<User> users, String inputId) {
            // 2、遍历集合,依次获取集合中每个用户对象
            for (User user : users) {
                // 依次判断输入的id 是否与 当前用户的id一样
                if (inputId.equals(user.getId())) {
                    // 一样,说明存在,返回true
                    return true;
                }
            }
    
            // 3、遍历结束,说明仍然找不到对应id的用户,说明不存在。返回false
            return false;
        }
    
    
        /**
         * 查看所有用户信息
         *
         * @param users     用户对象集合
         */
        public static void showUsers(ArrayList<User> users) {
            // 1、判断users是否为null
            if (users == null) {
                System.out.println("您的用户对象集合为null~");
                return;
            }
    
            // 2、遍历users,依次获取集合中每个用户对象
            System.out.println("\n用户信息如下:");
            for (User user : users) {
                System.out.println("id:" + user.getId()
                        + "\t用户名:" + user.getName()
                        + "\t密码:" + user.getPassword());
            }
        }
    
    
        /**
         * 添加用户信息
         *
         * @param users     用户对象集合
         */
        public static void addUsers(ArrayList<User> users) {
            // 1、判断users是否为null
            if (users == null) {
                System.out.println("您的用户对象集合为null~");
                return;
            }
    
            // 2、从键盘录入用户信息
            System.out.println("-------录入用户信息界面-------");
            Scanner sc = new Scanner(System.in);
    
            while (true) {
                System.out.println("请您录入用户的id:");
                String id = sc.next();
    
                // 判断用户id是否已经存在
                boolean flag = isExist(users, id);
                if (flag) {
                    System.out.println("该用户id已存在,请重新录入!");
                }else {
                    System.out.println("请您录入用户的名称:");
                    String username = sc.next();
                    System.out.println("请您录入用户的密码:");
                    String password = sc.next();
    
                    // 3、将录入的用户信息封装成用户对象,并添加进集合中
                    users.add(new User(id, username, password));
                    System.out.println("id为" + id + "的用户已成功录入!");
    
                    // 4、问一下是否要继续录入用户信息
                    isContinue(users, sc);
                    break;
                }
            }
        }
    
    
        /**
         * 问一下是否要继续录入用户信息
         *
         * @param users     用户对象集合
         * @param sc        键盘录入对象
         */
        public static void isContinue(ArrayList<User> users, Scanner sc) {
            // 1、判断users是否为null
            if (users == null) {
                System.out.println("您的用户对象集合为null~");
                return;
            }
    
            // 2、判断sc是否为null
            if (sc == null) {
                System.out.println("您的键盘录入对象为null~");
                return;
            }
    
            // 3、问一下是否要继续录入用户信息
            System.out.println("您是否要继续录入?(yes/no):");
            String command = sc.next();
            switch (command) {
                case "yes":
                    // 输入的是yes,回调addUsers方法,继续录入用户信息
                    addUsers(users);
                    break;
                default:
                    // 输入的是其他,结束录入
                    System.out.println("好的!");
                    break;
            }
        }
    }
    
    -------录入用户信息界面-------
    请您录入用户的id:
    ha001
    请您录入用户的名称:
    zhangsan
    请您录入用户的密码:
    123abc
    id为ha001的用户已成功录入!
    您是否要继续录入?(yes/no):
    yes
    -------录入用户信息界面-------
    请您录入用户的id:
    ha001
    该用户id已存在,请重新录入!
    请您录入用户的id:
    ha001
    该用户id已存在,请重新录入!
    请您录入用户的id:
    ha002
    请您录入用户的名称:
    lisi
    请您录入用户的密码:
    abc123
    id为ha002的用户已成功录入!
    您是否要继续录入?(yes/no):
    yes
    -------录入用户信息界面-------
    请您录入用户的id:
    ha002
    该用户id已存在,请重新录入!
    请您录入用户的id:
    ha003
    请您录入用户的名称:
    wangwu
    请您录入用户的密码:
    123456
    id为ha003的用户已成功录入!
    您是否要继续录入?(yes/no):
    no
    好的!
    
    用户信息如下:
    id:ha001	用户名:zhangsan	密码:123abc
    id:ha002	用户名:lisi	密码:abc123
    id:ha003	用户名:wangwu	密码:123456
    ------根据id查询用户是否存在------
    请您输入要查询的用户的id:
    ha004
    id为ha004的用户是否存在:false
    
    Process finished with exit code 0
    
    
    -------录入用户信息界面-------
    请您录入用户的id:
    001
    请您录入用户的名称:
    zhangfei
    请您录入用户的密码:
    123123
    id为001的用户已成功录入!
    您是否要继续录入?(yes/no):
    yes
    -------录入用户信息界面-------
    请您录入用户的id:
    001
    该用户id已存在,请重新录入!
    请您录入用户的id:
    002
    请您录入用户的名称:
    guanyu
    请您录入用户的密码:
    123abc
    id为002的用户已成功录入!
    您是否要继续录入?(yes/no):
    no
    好的!
    
    用户信息如下:
    id:001	用户名:zhangfei	密码:123123
    id:002	用户名:guanyu	密码:123abc
    ------根据id查询用户是否存在------
    请您输入要查询的用户的id:
    002
    id为002的用户是否存在:true
    
    Process finished with exit code 0
    
    


5、添加手机对象并返回要求的数据
  • 需求

    • 定义手机类对象:
      • 手机属性:品牌、价格。
    • 定义一个集合,存入三个手机对象。
    • 分别为:小米,1000;苹果,8000。锤子,2999。
    • 定义一个方法,将价格低于3000的手机信息返回。
  • 分析

    • 需要一个手机类对象,用于将录入的手机信息封装成一个手机对象。
    • 需要一个手机对象类型的集合,用于存储手机对象。
    • 需要录入手机对象到集合中。
    • 需要一个方法,将价格低于3000的手机信息返回。
  • 实现

    package com.app.demo23_array_list_custom_type;
    
    /*
        手机类
     */
    public class Phone {
        // 定义手机的属性:品牌、价格
        private String brand;
        private double price;
    
        public Phone() {
        }
    
        public Phone(String brand, double price) {
            this.brand = brand;
            this.price = price;
        }
    
        public String getBrand() {
            return brand;
        }
    
        public void setBrand(String brand) {
            this.brand = brand;
        }
    
        public double getPrice() {
            return price;
        }
    
        public void setPrice(double price) {
            this.price = price;
        }
    
        @Override
        public String toString() {
            return "Phone{" +
                    "brand='" + brand + '\'' +
                    ", price=" + price +
                    '}';
        }
    }
    
    package com.app.demo23_array_list_custom_type;
    
    import java.util.ArrayList;
    import java.util.Scanner;
    
    /*
        集合综合练习:添加手机对象并返回要求的数据
            需求:
              定义手机类对象:
                 手机属性:品牌、价格。
              定义一个集合,存入三个手机对象。
              分别为:小米,1000;苹果,8000。锤子,2999。
              定义一个方法,将价格低于3000的手机信息返回。
     */
    public class PhoneTest {
        public static void main(String[] args) {
            // 1、定义一个手机对象类型的集合,用于存储手机对象
            ArrayList<Phone> phones = new ArrayList<>();
    
            // 2、添加手机信息:从键盘录入手机的品牌、价格并封装成一个手机对象添加进集合中
            addPhone(phones);
    
            // 3、查看所有手机信息
            System.out.println("\n手机信息如下:");
            showPhones(phones);
    
            // 4、将价格低于3000的手机信息返回
            ArrayList<Phone> newPhones = judgePrice(phones);
            System.out.println("所有低于指定价格的手机信息如下:");
            showPhones(newPhones);
        }
    
    
        /**
         * 获取低于指定价格的手机对象(多个数据)
         * 技巧:如果我们要返回多个数据,可以把这些数据先放到一个容器当中,再把容器返回
         * 容器可以是集合、数组(推荐使用集合)
         *
         * @param phones        手机对象集合
         * @return              返回低于指定价格的手机对象集合
         */
        public static ArrayList<Phone> judgePrice(ArrayList<Phone> phones) {
            // 1、判断phones是否为null
            if (phones == null) {
                System.out.println("您的手机对象集合不能为null~");
                return null;
            }
    
            // 2、定义一个手机对象类型的集合,用于存储所有低于指定价格的手机对象
            ArrayList<Phone> newPhones = new ArrayList<>();
    
            // 3、输入指定价格
            System.out.println("-----查看所有低于指定价格的手机信息-----");
            Scanner sc = new Scanner(System.in);
            while (true) {
                System.out.println("请您输入指定价格:");
                double price = sc.nextDouble();
                // 3、判断price是否大于0
                if (price > 0) {
                    // a.遍历phones,依次获取集合中每个手机对象
                    for (Phone phone : phones) {
                        // b.判断当前获取到的手机对象的价格 是否小于 指定价格
                        if (phone.getPrice() < price) {
                            // 小于,则将该手机对象添加进newPhones集合中
                            newPhones.add(phone);
                        }
                    }
                    // c.循环结束,说明所有低于指定价格的手机对象已存入newPhones集合中了,将该集合返回
                    return newPhones;
    
                }else {
                    System.out.println("您输入的指定价格不合理!请重新输入~");
                }
            }
        }
    
    
        /**
         * 查看所有手机信息
         *
         * @param phones    手机对象集合
         */
        public static void showPhones(ArrayList<Phone> phones) {
            // 1、判断phones是否为null
            if (phones == null) {
                System.out.println("您的手机对象集合不能为null~");
                return;
            }
    
            // 2、遍历phones,依次获取集合中每个手机对象
            for (Phone phone : phones) {
                System.out.println("品牌:" + phone.getBrand() + "\t价格:" + phone.getPrice());
            }
        }
    
    
        /**
         * 录入手机信息
         *
         * @param phones    手机对象集合
         */
        public static void addPhone(ArrayList<Phone> phones) {
            // 1、判断phones是否为null
            if (phones == null) {
                System.out.println("您的手机对象集合不能为null~");
                return;
            }
    
            // 2、从键盘录入手机信息:品牌、价格
            System.out.println("-----录入手机信息-----");
            Scanner sc = new Scanner(System.in);
            System.out.println("请您录入手机的品牌:");
            String brand = sc.next();
            while (true) {
                System.out.println("请您录入手机的价格:");
                double price = sc.nextDouble();
    
                // 判断价格是否大于等于0
                if (price >= 0) {
                    // 价格合理,将手机信息封装成手机对象,并添加进集合中
                    phones.add(new Phone(brand, price));
                    System.out.println("品牌为" + brand + "的手机录入成功!");
                    break;
                }else {
                    System.out.println("价格不合理!请重新录入~");
                }
            }
    
            // 3、循环结束,说明手机信息录入完成,问一下是否还要继续录入手机信息
            isContinue(phones, sc);
        }
    
    
        /**
         * 问一下是否要继续录入手机信息
         *
         * @param phones        手机对象集合
         * @param sc            键盘录入对象
         */
        public static void isContinue(ArrayList<Phone> phones, Scanner sc) {
            // 1、判断phones和sc是否都为null
            if (phones == null && sc == null) {
                System.out.println("您的手机对象集合与键盘录入对象都不能为null~");
                return;
            }else if (sc == null){
                // 2、判断键盘录入对象是否为null
                System.out.println("您的键盘录入对象不能为null~");
                return;
            } else if (phones == null){
                // 3、判断手机对象集合是否为null
                System.out.println("您的手机对象集合不能为null~");
                return;
            }
    
            // 4、问一下是否要继续录入手机信息
            System.out.println("您是否要继续录入?(yes/no):");
            String command = sc.next();
            switch (command) {
                case "yes":
                    // 输入的是yes,回调addPhone方法,继续录入手机信息
                    addPhone(phones);
                    break;
                default:
                    // 输入的是其他,结束录入
                    System.out.println("好的!");
                    break;
            }
        }
    }
    
    -----录入手机信息-----
    请您录入手机的品牌:
    小米
    请您录入手机的价格:
    -1
    价格不合理!请重新录入~
    请您录入手机的价格:
    1000
    品牌为小米的手机录入成功!
    您是否要继续录入?(yes/no):
    yes
    -----录入手机信息-----
    请您录入手机的品牌:
    苹果
    请您录入手机的价格:
    8000
    品牌为苹果的手机录入成功!
    您是否要继续录入?(yes/no):
    yes
    -----录入手机信息-----
    请您录入手机的品牌:
    锤子
    请您录入手机的价格:
    2999
    品牌为锤子的手机录入成功!
    您是否要继续录入?(yes/no):
    no
    好的!
    
    手机信息如下:
    品牌:小米	价格:1000.0
    品牌:苹果	价格:8000.0
    品牌:锤子	价格:2999.0
    -----查看所有低于指定价格的手机信息-----
    请您输入指定价格:
    -1
    您输入的指定价格不合理!请重新输入~
    请您输入指定价格:
    3000
    所有低于指定价格的手机信息如下:
    品牌:小米	价格:1000.0
    品牌:锤子	价格:2999.0
    
    Process finished with exit code 0
    
    


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值