簡體   English   中英

在數組列表中搜索特定對象並打印數組列表中的所有對象

[英]searching for a particular object in array list and printing all the objects in array list

我必須實現一個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);



        }
    }
}

您需要在Student類中實現equals()方法,如果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

更新 :-

同樣,無論何時overriding equals方法,都需要重寫hashcode方法,以保持它們之間的常規協定。 所以覆蓋hashcode ,將計算hashcode你的instances僅基於在其上比較你的域objects

因此,您需要使用studentNo來計算hashcode

@Override
public int hashcode() {
    return this.getStudentNo().hashCode(); 
}
  • HashCode的計算algorithm應為:如果兩個實例相等,則其哈希碼也應等於
  • 當然,在未修改實例的情況下,它每次都應為同一實例返回相同的值。
  • 兩個不同的實例可以具有相同的哈希碼

正如@hyde在評論中所建議的 :-

如果這對您來說太麻煩了,那么您可以使用其他方法,該方法與equals方法執行相同的任務,例如checkEquals() ,而ignore覆蓋equals()方法。 但是在這種情況下,您將必須對List進行iteration ,並且對於每個list元素,請student調用此method進行比較。

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM