在数组列表中搜索特定对象并打印数组列表中的所有对象

时间:2012-10-21 16:48:05

标签: java search printing arraylist

我必须实现一个java应用程序来演示使用数组对象列表。我正在使用学生,我有一个StudentTest课程。我应该可以输入详细信息(我已经完成了)。我只是不确定如何通过学号编号搜索数组列表中的特定对象,还打印数组列表。任何提示都会非常感谢。

到目前为止

代码:

package student;

public class Student {

    private String studentName;
    private String studentNo;
    private String email;
    private int year;

    public Student() {
        this.studentName = null;
        this.studentNo = null;
        this.email = null;
        this.year = -1;
    }

    public Student(String nName, String nNum, String nEmail, int nYr) {
        this.studentName = nName;
        this.studentNo = nNum;
        this.email = nEmail;
        this.year = nYr;
    }

    public void setStudentName(String newStudentName) {
        this.studentName = newStudentName;
    }

    public void setStudentNo(String newStudentNo) {
        this.studentNo = newStudentNo;
    }

    public void setEmail(String newEmail) {
        this.email = newEmail;
    }

    public void setYear(int newYear) {
        this.year = newYear;
    }

    public String getStudentName() {
        return studentName;
    }

    public String getStudentNo() {
        return studentNo;
    }

    public String getEmail() {
        return email;
    }

    public int getYear() {
        return year;
    }

}
package student;

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

public class studentTest {

    public static void main(String[] args) {
        Scanner input = new Scanner(System.in);


        List<Student> Students = new ArrayList();


        System.out.println("Enter number of students");
        int countStudents = input.nextInt();

        for (int i = 0; i < countStudents; i++) {
            Student student1 = new Student();
            System.out.println("Enter details for student: " + (i + 1));

            System.out.println("Enter name: ");
            student1.setStudentName(input.next());

            System.out.println("Enter Number: ");
            student1.setStudentNo(input.next());

            System.out.println("Enter email: ");
            student1.setEmail(input.next());

            System.out.println("Enter year: ");
            student1.setYear(input.nextInt());
            Students.add(student1);



        }
    }
}

1 个答案:

答案 0 :(得分:1)

您需要在equals()课程中实施Student方法,如果2名学生具有相同的studentNo,则会返回true,否则为false

@Override
public boolean equals(Object ob) {

    if (!(ob instanceof Student)) { 
        return false;
    }

    return ob.getStudentNo().equals(this.getStudentNo());
}

现在,您只需使用contains方法检查student中是否有List

更新: -

此外,只要您使用hashcode overriding方法,就需要覆盖equals方法,以维护它们之间的一般合​​同。因此,请仅基于您要比较hashcode

的字段来覆盖仅计算hashcode instances objects的{​​{1}}

因此,您需要使用hashcode计算studentNo

@Override
public int hashcode() {
    return this.getStudentNo().hashCode(); 
}
  • HashCode计算algorithm应该是这样的,如果两个实例相等,它们的hashcode也应该等于
  • 每次都应该为同一个实例返回相同的值,当然,当实例未被修改时。
  • 两个不同的实例可以具有相同的哈希码

正如@hyde在评论中所建议的那样: -

如果这对您来说太多了,那么您可以使用不同的方法,与equals方法执行相同的任务,例如checkEquals()ignore覆盖equals()方法。但在这种情况下,您必须在iteration上执行List,并且对于每个列表元素,请使用method调用此student进行比较。

for(Student student: studentList) {
    if (student.checkEquals(myStudent)) {
        System.out.println("True");
    }
}