我正在尝试打印我的arraylist,但我不知道为什么我的打印不会在Adjlist的每个索引中逐行打印IntegerPair:
private ArrayList<ArrayList<IntegerPair>> AdjList; //outer arraylist
private ArrayList<IntegerPair> storeNeighbour; //inner arraylist
private IntegerPair pair;
这是我的代码:
for (ArrayList<IntegerPair> l1 : AdjList) {
for (IntegerPair n : l1) {
System.out.println( n + "# ");
}
}
答案 0 :(得分:4)
ArrayList.toString()的默认行为是返回一个字符串,该字符串包含({略)美化列表中每个元素的toString()
调用列表。
所以,长话短说:你几乎就在那里;缺少的一件事:
@Override
public String toString() {
...
你的班级IntegerPair。
像:
public class IntegerPair {
private final Integer first;
private final Integer second;
...
@Override
public String toString() {
return "(" + first + "/" + second ")";
}
或类似的东西。如果不重写toString()
,您的类将回退到java.lang.Object中给出的默认实现;并且该方法返回类名+哈希码编号(因此不那么易读)。
答案 1 :(得分:0)
这里:
for (ArrayList<IntegerPair> l1 : AdjList) {
for (IntegerPair n : l1) {
System.out.println( n + "# ");
}
}
您不区分每个打印的列表
因此,您将获得一系列输出,而不知道与同一列表关联的输出。
更具可读性的印刷品将是:
for (ArrayList<IntegerPair> l1 : AdjList) {
System.out.println("ArrayList with :");
for (IntegerPair n : l1) {
System.out.println( n + "# ");
}
}
您没有指定输出。所以我不认为toString()
是否被覆盖。如果未覆盖它,则应覆盖它以呈现此处预期的字符串:System.out.println( n + "# ");
,或者您应指定要在此处呈现的内容:
System.out.println( n.getOne() + "," + n.getOther() + "# ");
作为旁注,toString()
用于调试/记录,而不是用于显示功能消息,因为对象可以以案例的方式呈现,而以其他方式呈现给其他案例。