打印ArrayList

112
我有一个包含Address对象的ArrayList。
如何打印出此ArrayList的值,也就是打印出数组的内容,即这种情况下的数字。
我只能使用以下代码将实际内存地址打印出来:
for(int i = 0; i < houseAddress.size(); i++) {   
    System.out.print(houseAddress.get(i));
}  

我尝试重新表述问题以使其更清晰。 - antony.trupe
好的,我现在完全困惑了。你说你有一个包含指向数组的地址的ArrayList。你是如何获得放入ArrayList中的数组的地址的?在Java中,你不应该能够轻易地获取任何原始指针。 - Tamás
在Java中,您无法指向内存位置。 - antony.trupe
尝试包含一个更大的代码示例,这可能有助于我们推断问题。 - antony.trupe
1
请给我们提供houseAddress变量的声明,并提供一些包含在其中的元素的示例代码。 - Louis Wasserman
显示剩余6条评论
24个回答

142

list.toString()已经足够好用。

List接口并没有定义toString()的契约,但是AbstractCollection基类提供了一个有用的实现,ArrayList继承了这个实现。


1
System.out.println(list); 会打印出相同的输出。 - Asha
7
这里的列表是房屋地址:Arrays.toString(houseAddress.toArray()) - Beginner
3
AbstractCollection已经重写了toString()方法以打印其元素的内容。因此,只需执行list.toString()即可打印所有元素的toString()。对于所有集合都是如此。 - Hanif

28

在你的address类中添加toString()方法,然后执行以下操作:

System.out.println(Arrays.toString(houseAddress));

49
这只适用于数组,而不适用于数组列表。由于houseAddress不是数组类型,因此您无法将其作为Arrays.toString()的参数提供。 - beckah
在我看来,循环只是唯一的出路,如果有更好的选择,请分享。 - geniushkg

26

据我所知,您正在尝试打印一个数组列表(ArrayList)的数组,其中一种显示方式是:

Original Answer
System.out.println(Arrays.deepToString(list.toArray()));

9

由于您没有提供toString()方法的自定义实现,因此它调用默认的实现,该实现将打印该对象在内存中的地址。

解决方案:在Address类中覆盖toString()方法,如下所示:

public class Address {

int addressNo ; 
....
....
...

protected String toString(){
    return Integer.toString(addressNo);
}

现在当你调用
houseAddress.get(i)  in the `System.out.print()` method like this

System.out.print( houseAddress.get(i) ) 会调用 Address 对象的 toString() 方法。


9
您可以简单地将其提供为:
System.out.println("Address:" +houseAddress);

您的输出将类似于[address1,address2,address3],这是因为ArrayList类或其超类会覆盖toString()函数。希望这有所帮助。

8

假设你有一个像这样的数字列表

List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5, 6);

如果您打印列表

//method 1
// Conventional way of printing arraylist
for (int number : numbers) {
    System.out.print(number);
}

//method 2
// Lambda Expression to print arraylist
numbers.forEach((Integer value) -> System.out.print(value));

//method 3
// Lambda Expression to print arraylist
numbers.forEach(value -> System.out.print(value));


//method 4
// Lambda Expression (method reference) to print arraylist
numbers.forEach(System.out::print);

5
你是说ArrayList存储的是数组地址,因为从toString调用中返回的是数组地址,还是实际上你存储的就是数组地址?
如果你有一个数组列表(例如,ArrayList),其中包含数组。
int[] arr = {1, 2, 3};
houseAddress.add(arr);

然后要打印数组的值,您需要调用Arrays.deepToString

for (int i = 0; i < houseAddress.size(); i++) {
     System.out.println(Arrays.deepToString(houseAddress.get(i)));
}

4
public void printList(ArrayList<Address> list){
    for(Address elem : list){
        System.out.println(elem+"  ");
    }
}

这与原帖的当前代码没有区别。问题仍然存在。 - Tom

3

我不确定是否理解了地址(这里假设是房屋地址)的概念,但如果你想要打印ArrayList的方法,这里有一个:

System.out.println(houseAddress.toString().replaceAll("\\[\\]", ""));

3
houseAddress.get(i)放在括号内,并调用.toString()函数:即如下所示。请参见以下内容。
for(int i = 0; i < houseAddress.size(); i++) {
    System.out.print((houseAddress.get(i)).toString());
}

@Mr.Goose,我不太清楚你的问题是什么意思? - 21stking
调用 .toString() 是多余的。 - Gabriel Pellegrino

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接