Arrylist中用键盘录入实现集合遍历

两种方法的区别及该注意的问题;
第一种:

package com.heime.ArryList;

import com.heime.Domain.Student;

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

public class Demo3reredo {

    /*  需求:创建一个存储学生对象的集合,存储3个学生对象,使用程序实现在控制台遍历该集合
          学生的姓名和年龄来自于键盘录入

    步骤方法:1,定义一个学生类
    2,创建集合对象
    3,键盘录入学生数据
    4,创建学生字符串,然后将键盘录入的数据赋值给学生对象的成员变量
    5,往集合中添加学生对象
    6,遍历集合
*/
    public static void main(String[] args) {
//                2,创建集合对象
        ArrayList<Student> list = new ArrayList<>();

        ArrylistMethod(list);
        ArrylistMethod(list);
        ArrylistMethod(list);
//需要存储几个学生就要,引用几次ArrylistMethod方法

//            6,遍历集合
        for (int i = 0; i < list.size(); i++) {
            Student stu0 = list.get(i);
            System.out.println(stu0.getName() +"..." + stu0.getAge());
        }


    }

    public static void ArrylistMethod(ArrayList<Student> list) {
        //        3,键盘录入学生数据
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入学生姓名:");
        String name = sc.nextLine();

        System.out.println("请输入学生年龄:");
        int age = sc.nextInt();

//        4,创建学生字符串,然后将键盘录入的数据赋值给学生对象的成员变量

        Student stu1 = new Student(name,age);

        stu1.setName(name);
        stu1.setAge(age);

//        5,往集合中添加学生对象
        list.add(stu1);
    }
}

第二种:

package com.heime.ArryList;

import com.heime.Domain.Student;

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

public class Demo3Redo {

/*  需求:创建一个存储学生对象的集合,存储3个学生对象,使用程序实现在控制台遍历该集合
          学生的姓名和年龄来自于键盘录入
    步骤方法:1,定义一个学生类
    2,创建集合对象
    3,键盘录入学生数据
    4,创建学生字符串,然后将键盘录入的数据赋值给学生对象的成员变量
    5,往集合中添加学生对象
    6,遍历集合
*/

    public static void main(String[] args) {
        //   2,创建集合对象
        ArrayList<Student> list =new ArrayList<>();

        Student stu2 = ArryListMethod();
        Student stu3 = ArryListMethod();
        Student stu4 = ArryListMethod();

//      5,往集合中添加学生对象
        list.add(stu2);
        list.add(stu3);
        list.add(stu4);

//    6,遍历集合
        for (int i = 0; i < list.size(); i++) {
            Student sss = list.get(i);
            System.out.println(sss.getName() +"..." +sss.getAge());
        }
    }

    public static Student ArryListMethod() {

        //    3,键盘录入学生数据
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入学生姓名:");
        String name = sc.nextLine();
        /*  nextline与nextInt配合使用,Nextline将不会有键盘录入的机会。
            但我使用了nextline来接收字符串并没有出现异常。

         */

        System.out.println("请输入学生年龄:");
        int age = sc.nextInt();

        //    4,创建学生字符串,然后将键盘录入的数据赋值给学生对象的成员变量
        Student stu1 = new Student(name,age);

        return stu1;
    }
}

第二种方式更符合面向对象的开发方式,ArryListMethod 只负责对象的创建,职责较为清晰。

首先:方式1的 第4步,代码有重复的

//  下面这行代码在创建对象的同时 已经为 对象 赋值了 name 和 age
 Student stu1 = new Student(name,age);
  // 以下两行代码 依然是在给对象赋值,是重复的  
 stu1.setName(name);
 stu1.setAge(age);

这两种方式的区别:

  • 方式1中的对于声明和创建学生对象都是在 ArrylistMethod()方法中去创建的;
    方式2中的声明学生对象是在main()方法中,而创建学生对象是在 ArrylistMethod()方法中去创建的;
  • 方式1中在main()方法中每次 调用这个ArrylistMethod(list);方法去创建对象并添加到LIst集合中,以list集合作为参数去传递,会额外消耗内存;很明显这一点方式2去获得一个对象没有传参数,这一点来说,方式2做的很好
  • 在将 对象加入集合的时机来看,方式1是在ArrylistMethod(list);方法中完成的,方式2是在main()方法中完成的。

综合来看,方式2是适合人的正常思维来编写的。方式1很粗糙,作为编程人员来说,每个方法有每个方法的功能,比如方式2中的ArryListMethod();方法,该方法就是返回给我一个对象,至于我要怎么操作我得到的对象,那是我下一步要做的事情。而方式1中的该方法就直接即生成对象又直接加入集合中显得很没有逻辑性,不适合后续的业务扩展。比如说我这个集合只加age<50的对象,我只需要在main()方法中做个判断即可。