打印ArrayList的成员

时间:2014-08-08 00:31:57

标签: java arraylist

当ArrayLists的引用变量“进入”System.out.println()时,下面的ArrayList成功打印其对象的字段。

输出:[Dal:Tigers,SMU:Tigers,Acadia:Axemen]

第二个ArrayList在其ArrayList引用“进入”System.out.println()...

时无法打印其对象的字段

为什么呢?甚至知道可以使用ArrayList的引用变量上的输出方法打印ArrayList的成员,我感到很惊讶。第二个代码和第一个代码之间有什么区别?

USport课程:

import java.util.ArrayList;

class USport {
    String school; // creates a field for String
    String name;  // creates a field for name
    public USport( String s, String n) // initializes school and name
    {school = s;
    name = n;}
    public String toString () // for use in output method; returns both
    {return school + ":" + name;}   
}

public class ArrayListDemo {

    public static void main(String a[]) {
        ArrayList <USport> v = new ArrayList <> ();
        v.add( new USport ("Dal", "Tigers"));
        v.add( new USport ("SMU", "Tigers"));
        v.add( new USport ("Acadia", "Axemen"));

        System.out.println(v);
    }
}

城市类:

import java.util.ArrayList; 

public class Cities {
    private String pub;
    private boolean pubHasDancing;

public Cities(String pub, boolean pubHasDancing){
    this.pub = pub;
    this.pubHasDancing = pubHasDancing;
}

public static void main(String[]args){  
    ArrayList <Cities> list2 = new ArrayList <> ();
    list2.add(new Cities ("Joce McCartney", false));
    list2.add(new Cities ("Paul McCartney", true));
    System.out.println(list2); // <<<<<< This is the method I'm questioning
    System.out.println(list2.get(1).pub);
    System.out.println(list2.toString()); /** <<<< This output should be the same as println's output no */
    }
}

2 个答案:

答案 0 :(得分:3)

因为USport声明了执行打印的toString()方法,而Cities没有。

答案 1 :(得分:2)

不同之处在于:在第一个类中,您覆盖toString()方法。但是,你在第二堂课中没有做到这一点。 System.out.println()将调用ArrayList的{​​{1}}方法,该方法将调用AbstractCollection类的toString方法。因此,您需要覆盖第二类的toString()方法才能获得正确的输出。

toString()