[英]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.