Java打印ArrayList的数组列表

时间:2017-02-27 11:51:34

标签: java arraylist printing

我正在尝试打印我的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 + "# ");
  }     
}

2 个答案:

答案 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()用于调试/记录,而不是用于显示功能消息,因为对象可以以案例的方式呈现,而以其他方式呈现给其他案例。