gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-04 07:59:56 24 4
gpt4 key购买 nike

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

到目前为止的代码:

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 中。

更新:-

此外,每当您重写 equals方法时,您都需要重写hashcode方法,以维护它们之间的一般契约。因此,重写hashcode,它将仅根据您要比较对象的字段来计算实例hashcode

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

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

按照 @hyde 在评论中的建议:-

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

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

关于java - 搜索数组列表中的特定对象并打印数组列表中的所有对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12999938/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com