[英]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();
}
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.