这个程序中的ArrayList如何在没有任何循环的情况下打印元素?

时间:2015-02-26 11:08:12

标签: java arraylist

以下程序如何打印ArrayList中包含的元素而不使用任何循环

import java.util.*;  

class Abc{  
 public static void main(String args[]){  
  ArrayList<String> al=new ArrayList<String>();  
  al.add("Ravi");  
  al.add("Vijay");  
  al.add("Ravi");  
  al.add("Ajay");  

    System.out.println(al);  
 }  
}  

输出:[Ravi,Vijay,Ravi,Ajay]

4 个答案:

答案 0 :(得分:4)

ArrayList本身没有toString()方法。它扩展了AbstractList,内部扩展AbstractCollection,定义了实际的'toString'方法。

来自java docs:

的toString

public String toString()
  

返回此集合的字符串表示形式。字符串   表示由一个集合的元素列表组成   它们由迭代器返回,用方括号括起来   ( “[]”)。相邻元素由字符“,”(逗号分隔)分隔   和空间)。元素将转换为字符串   将String.valueOf(对象)。

Overrides:
toString in class Object
Returns:
a string representation of this collection

答案 1 :(得分:1)

想想这一行:

System.out.println(al);  

真的是

System.out.println(al.toString());  

toString方法继承自AbstractCollection。

如果您对AbstractCollection的toString方法背后的内容感兴趣...

enter image description here

link:http://grepcode.com/file/repository.grepcode.com/java/root/jdk/openjdk/6-b14/java/util/AbstractCollection.java#AbstractCollection.toString%28%29

答案 2 :(得分:0)

它正在使用循环,但不是在您显示的代码中,而是在toString()方法中ArrayList继承自AbstractCollection的方法,这是其祖先类之一。< / p>

每当您将对象传递给print()println()时,实际发生的是print()调用String.valueOf()传递该对象。

反过来,如果传递的对象不为null,则调用对象s toString`方法。

AbstractCollection有一个toString方法,它依赖于迭代并调用它所代表的集合中每个项目的toString方法。

所以有一个循环,但它隐藏在调用方法的方法中。

答案 3 :(得分:0)

因为ArrayList是用Java编写的,它有自己的实现。这就是为什么当你使用toString()然后它会打印你的元素。

但是如果你尝试使用带有Array的toString(),那么它将无法工作。 因为数组是语言规范的一部分。

希望这会对你有所帮助:)。