day15-java

集合

ArrayList<>

package com.shifan.arraylist;

import com.shifan.domain.Student;

/**
 *集合与数组的区别
 * 集合与数组一样是存储数据的容器
 * 不同之处在于集合的存储数据的容量可以改变
 */
public class Demo01ArrayList {
    public static void main(String[] args) {
        //创建一个对象数组
        Student[] arr = new Student[3];
        Student stu1 = new Student("张三", "33");
        Student stu2 = new Student("李四", "43");
        Student stu3 = new Student("王五", "23");
        arr[0] = stu1;
        arr[1] = stu2;
        arr[2] = stu3;
        //遍历数组
        for (Student stu : arr) {
            System.out.println(stu);
            stu.show();
        }
    }
}

ArrayList的构造方法、添加方法

package com.shifan.arraylist;

import java.util.ArrayList;

/**
 * ArrayList集合类的构造方法ArrayList(),构造一个初始容量为10的空列表
 * 添加方法boolean add(E element),尾部添加元素
 * void add(index, E element),指定索引位置插入元素
 * 注意:1.ArrayList类型变量名输出时同样不会输出地址而是具体值
 * 2.<> 这是泛型,这里用于限制集合内存储的数据类型,
 * 注意<> 里面只能填写引用数据类型
 */
public class Demo02ArrayList {
    public static void main(String[] args) {
        //定义一个ArrayList类(未限制数据类型)
        ArrayList list1 = new ArrayList();
        //在列表尾部添加数据
        list1.add("abc");
        list1.add(123);
        list1.add(true);
        //[abc,123,true]
        System.out.println(list1);
        //定义一个只能存储字符串的集合
        ArrayList<String> list2 = new ArrayList<>();
        list2.add("shif");
        //list2.add(123);此时添加其他数据类型就会报错
        list2.add("fs");
        list2.add("sg");
        //在指定索引位置添加数据
        list2.add(1,"an");
        /*
        list2.add(10,"an");报索引越界异常,
        只能向已经存在元素的索引位置添加数据
        */
        System.out.println(list2);
    }
}

ArrayList 的常用成员方法

package com.shifan.arraylist;

import java.util.ArrayList;

/**
 * boolean remove(Object o),删除指定元素,返回是否删除成功
 * E remove(int index),删除指定索引位置的元素,返回被删除的元素
 * E set(int index,E e),修改指定索引位置的元素,返回被修改的元素
 * E get(int index),获取指定索引位置的元素
 * int size(),获取集合内元素个数
 */
public class Demo03ArrayListMethod {
    public static void main(String[] args) {
        ArrayList<Object> objects = new ArrayList<>();
        objects.add(1);
        objects.add("aaa");
        objects.add("a");
        objects.add("oo");
        objects.add("ccc");
        System.out.println(objects);
        //删除元素a
        if (objects.remove("a") == true) {
            System.out.println("成功删除元素a");
        }
        //objects.remove(1)无法删除元素1,remove默认1为索引而不是元素值
        System.out.println(objects);
        //修改索引3位置的数据,返回索引3处原先数据
        Object s = objects.set(3, "shif");
        System.out.println(s);
        System.out.println(objects);
        //获取索引2位置的数据
        System.out.println(objects.get(2));
        //获取列表长度
        System.out.println(objects.size());
    }
}

案例1:存储字符串并遍历

package com.shifan.arraylist;

import java.util.ArrayList;

/**
 * 定义一个存储3个字符串的集合,在控制台遍历打印
 */
public class Case1 {
    public static void main(String[] args) {
        ArrayList<String> strings = new ArrayList<>();
        strings.add("abc");
        strings.add("def");
        strings.add("ggg");
        for (String s : strings) {
            System.out.println(s);
        }
    }
}

案例2:存储学生对象并遍历

package com.shifan.arraylist;

import java.util.ArrayList;
import java.util.Scanner;

/**
 * 案例2:存储学生对象并遍历
 * 创建一个存储3个学生对象的集合
 * 键盘录入学生信息
 * 在控制台遍历打印该集合
 */
public class Case2 {
    public static void main(String[] args) {
        ArrayList<Student> students = new ArrayList<>();
        Scanner sc = new Scanner(System.in);
        for (int i = 0; i < 3; i++) {
            System.out.println("请输入学号:");
            String sNum = sc.nextLine();
            System.out.println("请输入姓名:");
            String sName = sc.nextLine();
            System.out.println("请输入年龄:");
            int sAge = sc.nextInt();
            System.out.println("请输入生日:");
            String sBirthday = sc.next();
            Student student = new Student(sNum,sName,sAge,sBirthday);
            students.add(student); 
        }
        for (Student stu : students) {
            stu.show();
        }
    }
}

学生类(以下同)

package com.shifan.arraylist;

public class Student {
    private String num;
    private String name;
    private int age;
    private String birthday;

    public void show(){
        System.out.println(num+"\t\t"+name+"\t"+age+"\t\t"+birthday);
    }
    public Student() {
    }

    public Student(String num, String name, int age, String birthday) {
        this.num = num;
        this.name = name;
        this.age = age;
        this.birthday = birthday;
    }

    public String getNum() {
        return num;
    }

    public void setNum(String num) {
        this.num = num;
    }

    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 getBirthday() {
        return birthday;
    }

    public void setBirthday(String birthday) {
        this.birthday = birthday;
    }
}

案例3:集合删除元素

package com.shifan.arraylist;

import java.util.ArrayList;

/**
 * 案例3:创建一个存储字符串的集合
 * 集合内存储{test,张三,李四,王五,test}
 * 删除所有test后将剩余元素遍历打印
 * @author shifan
 */
public class Case3 {
    public static void main(String[] args) {
        ArrayList<String> strings = new ArrayList<>();
        strings.add("张三");
        strings.add("test");
        strings.add("李四");
        strings.add("王五");
        strings.add("test");
        strings.add("test");
        System.out.println("删除test之前集合元素有:");
        for (String string : strings) {
            System.out.print(string+"\t");
        }
        for (int i = 0; i < strings.size(); i++) {
            //使用字符串常量调用equals方法可以避免空指针异常
            if ("test".equals(strings.get(i))){
                strings.remove(i);
                /*集合内元素删除后后面的元素都会自动向前移动,
                 导致索引发生变化*/
                i--;
            }
        }
        System.out.println("删除test之后集合元素有:");
        for (String string : strings) {
            System.out.print(string+"\t");
        }
    }
}

案例4:集合元素筛选

package com.shifan.arraylist;

import java.util.ArrayList;

/**
 * 集合元素筛选
 * 定义一个方法,接收一个泛型为Student的集合对象
 * 方法将年龄低于18的学生对象找出来存入新的集合并返回该集合
 */
public class Case4 {
    public static void main(String[] args) {
        ArrayList<Student> students = new ArrayList<>();
        students.add(new Student("111","张三",30,"1.10"));
        students.add(new Student("45","李四",10,"8.4"));
        students.add(new Student("7","王五",20,"7.7"));
        students.add(new Student("3","赵六",3,"5.8"));
        System.out.println("原集合学生信息:");
        for (Student ss : students) {
            ss.show();
        }
        ArrayList<Student> stu1 = choseStudent(students);
        System.out.println("年龄小于18的学生信息:");
        for (Student s : stu1) {
            s.show();
        }
    }

    private static ArrayList<Student> choseStudent(ArrayList<Student> list) {
        ArrayList<Student> stu = new ArrayList<>();
        for (Student l : list) {
            if (l.getAge()<18){
                stu.add(l);
            }
        }
        return stu;
    }
}

例题:学生信息管理系统

package com.shifan.arraylist;

import java.util.ArrayList;
import java.util.Scanner;


/**
 * 学生信息管理系统
 * 实现功能:1.添加学生信息
 *           2.删除学生信息
 *           3.修改学生信息
 *           4.查看学生信息
 *           5.退出系统
 * @author shifan
 * 注意:1.获取学号功能应该抽象为方法实现
 *       2.可以通过lo标记跳出循环的位置
 *       例如:lo:while(){
 *                  for(){
 *                      break lo;这里直接跳出while循环
 *                      }
 *                }
 */
public class Test {
    private static final int AGE = 100;
    public static void main(String[] args) {
        ArrayList<Student> students = new ArrayList<>();
        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 sc = new Scanner(System.in);
            int i = sc.nextInt();
            if (i == 1) {
                addStudent(students);
            } else if(i == 2){
                deleteStudent(students);
            }else if(i == 3){
                modifyStudent(students);
            }else if(i == 4){
                showStudent(students);
            } else if (i == 5) {
                System.out.println("感谢您的使用");
                break;
            } else {
                System.out.println("输入错误");
            }
        }

    }

    private static void modifyStudent(ArrayList<Student> students) {
        System.out.println("请输入学号:");
        Scanner sc = new Scanner(System.in);
        //接收学号
        String sNum = sc.nextLine();
        //创建Student对象用于存储找到的对象
        Student stu = new Student();
        //定义一个布尔变量记录是否找到了这个学号
        boolean a = false;
        //遍历列表,匹配学号
        for (Student stu1 : students) {
            if (sNum.equals(stu1.getNum())){
                //将匹配到的对象赋值给stu
                stu = stu1;
                a = true;
            }
        }
        if (a){
            String sNum1;
            while (true) {
                System.out.println("开始修改,请输入新的学号:");
                sNum1 = sc.nextLine();
                int i;
                for (i = 0; i < students.size(); i++) {
                    Student stu1 = students.get(i);
                    if (sNum1.equals(stu1.getNum())&&!(stu1.getNum().equals(sNum))) {
                        System.out.println("学号已存在");
                        break;
                    }
                }
                if (i == students.size()){
                    break;
                }
            }
            System.out.println("请输入新的姓名:");
            String sName = sc.nextLine();
            System.out.println("请输入新的年龄:");
            int sAge = sc.nextInt();
            if (sAge<0||sAge>AGE){
                System.out.println("输入错误");
                return;
            }
            System.out.println("请输入新的生日:");
            String sBirthday = sc.next();
            //修改数据
            stu.setNum(sNum1);
            stu.setName(sName);
            stu.setAge(sAge);
            stu.setBirthday(sBirthday);
            System.out.println("修改成功");
        }else {
            System.out.println("学号不存在");
        }
    }

    private static void deleteStudent(ArrayList<Student> students) {
        System.out.println("请输入学号");
        Scanner sc = new Scanner(System.in);
        String s = sc.nextLine();
        int i;
        for (i=0; i < students.size(); i++) {
            Student stu = students.get(i);
            if (s.equals(stu.getNum())){
                students.remove(stu);
                System.out.println("成功删除");
            }
        }
        if (i == students.size()){
            System.out.println("学号不存在");
        }
    }

    private static void showStudent(ArrayList<Student> students) {
        if (students.size() == 0) {
            System.out.println("无学生信息,请添加后重试");
        } else {
            System.out.println("学号        姓名    年龄      生日");
            for (Student stu : students) {
                stu.show();
            }
        }
    }

    private static void addStudent(ArrayList<Student> students){
        Scanner sc1 = new Scanner(System.in);
        String sNum;
        while (true) {
            System.out.println("请输入学号:");
            sNum = sc1.nextLine();
            int i;
            for (i = 0; i < students.size(); i++) {
                Student stu1 = students.get(i);
                if (sNum.equals(stu1.getNum())) {
                    System.out.println("学号已存在");
                    break;
                }
            }
            if(i == students.size()){
                break;
            }
        }
        System.out.println("请输入姓名:");
        String sName = sc1.nextLine();
        System.out.println("请输入年龄:");
        int sAge = sc1.nextInt();
        if (sAge<0||sAge>AGE){
            System.out.println("输入错误");
            return;
        }
        System.out.println("请输入生日:");
        String sBirthday = sc1.next();
        Student student = new Student(sNum,sName,sAge,sBirthday);
        students.add(student);
        System.out.println("添加成功");
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值