我是Java的初学者。下面的代码是我创建学生类型的ArrayList。我敢肯定我做的一切正确,但是输出不正确。
这是学生课程声明:
public static class Student implements Comparable{
public String first;
public String last;
public Integer ID;
Student(String first, String last, Integer ID){
this.first = first;
this.last = last;
this.ID = ID;
}
//@Override
public int compareTo(Object obj) {
return this.ID.compareTo(((Student) obj).ID);
}
}
这是在main中创建的ArrayList:
ArrayList<Student> arr2 = new ArrayList<Student>();
arr2.add(new Student("ol", "rr", 123));
arr2.add(new Student("iv", "tt", 321));
arr2.add(new Student("ia", "bg", 456));
这是要显示的行:
System.out.println("Before sorting: ");
System.out.println("\nObject: ");
System.out.println(arr2);
当我运行它时,没有编译错误,但是,这是输出屏幕上的内容:
排序前: 宾语: genericsort.BubbleSortArraylist$Student@1db9742
我不太确定这是怎么回事。谁能看到我没看到的东西?
答案 0 :(得分:4)
您正在从toString
中隐式调用Student
中的java.lang.Object
,因为每个Object都继承自该对象(这不是错误)。
为toString
覆盖Student
,它看起来会更好,例如:
public String toString(){
return "first = " + first + " second = " + second;
}
答案 1 :(得分:2)
您正在打印数组对象本身,因此它会打印arr2变量的哈希码。
您应该使用:
arr2.forEach(System.out::println);
您应该为学生课程覆盖toString:
public static class Student implements Comparable{
public String first;
public String last;
public Integer ID;
Student(String first, String last, Integer ID){
this.first = first;
this.last = last;
this.ID = ID;
}
//@Override
public int compareTo(Object obj) {
return this.ID.compareTo(((Student) obj).ID);
}
@Override
public String toString() {
return first + " " + last + " " + ID;
}
}