打印ArrayList


81

我有一个包含地址对象的ArrayList。

我如何打印此ArrayList的值,这意味着我要打印Array的内容,在本例中为数字。

我只能使用以下代码来打印出阵列的实际内存地址:

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

您是否要在内存中找到地址?
Paul Nikonowicz 2012年

对不起,我不明白你的意思。arraylist存储指向该数组的地址,我想打印该数组的内容,但是我不知道该怎么做。
dancooper93 2012年

我试图改写这个问题以使其更清楚。
antony.trupe 2012年

他说的是住所地址。我认为。
Kuldeep Jain 2012年

1
请给我们houseAddress变量的声明,以及它包含的元素的一些示例代码。
Louis Wasserman '02

Answers:


110
Arrays.toString(list.toArray())

System.out.println(list);打印相同的输出;
阿沙(Asha)2016年

4
列表是这里的住所地址:Arrays.toString(houseAddress.toArray())
初学者

3
AbstractCollection已经重写toString()以打印其元素的内容。因此,只需list.toString()打印其toString()所有元素。所有集合都是如此。
哈尼夫

18

toString()方法添加到您的address班级,然后执行

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

39
这仅适用于数组,而不适用于数组列表。您不能提供houseAddress参数作为参数,Arrays.toString()因为它不是Array类型的。
beckah 2014年

在我看来,循环仅是这里的出路,如果有人知道更好的选择,请分享。
geniushkg '16

17

据我了解,您正在尝试打印一个数组的ArrayList和一种显示方式是

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) )toString()对的Address对象会被称为


7

您可以简单地将其指定为:

System.out.println("Address:" +houseAddress);

您的输出将如下所示 [address1, address2, address3]

这是因为ArrayList类或其超类将具有toString()函数被覆盖。

希望这可以帮助。


7

假设您有一个这样的数字清单

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+"  ");
    }
}

这与OP的当前代码没有什么不同。问题仍然存在。
汤姆

3

Java 8开始,您可以从Iterable接口使用forEach()方法。 这是默认方法。作为参数,它接受一个类的对象,该对象实现了功能接口Consumer。您可以 通过三种方式在本地实现Consumer:使用匿名类


houseAddress.forEach(new Consumer<String>() {
    @Override
    public void accept(String s) {
        System.out.println(s);
    }
}); 

lambda表达式

houseAddress.forEach(s -> System.out.println(s));

或使用方法参考

houseAddress.forEach(System.out::print);

这种打印方式适用于Iterable接口的所有实现。
所有这些,为您提供了定义如何打印元素的方式,而toString()则以一种格式强制执行打印列表。


3

放在houseAddress.get(i)方括号内并调用.toString()函数:即,请参阅下文

for(int i = 0; i < houseAddress.size(); i++) {
    System.out.print((houseAddress.get(i)).toString());
}

@鹅先生我不清楚你的问题,你是什么意思?
2014年

调用.toString()是多余的。
加百利·佩莱格里诺

2

我不确定我是否了解地址的概念(我在这里假设为houseAddress),但是如果您正在寻找一种打印ArrayList的方法,请执行以下操作:

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

2
 public static void main(String[] args) {
        List<Moyen> list = new ArrayList<Moyen>();
        Moyen m1 = new Moyen();
        m1.setCodification("c1");
        m1.setCapacityManager("Avinash");
        Moyen m2 = new Moyen();
        m2.setCodification("c1");
        m2.setCapacityManager("Avinash");
        Moyen m3 = new Moyen();
        m3.setCodification("c1");
        m3.setCapacityManager("Avinash");

        list.add(m1);
        list.add(m2);
        list.add(m3);
        System.out.println(Arrays.toString(list.toArray()));
    }


2

您可以使用迭代器。这是这里要做的最简单,最没有争议的事情。说houseAddress有数据类型的值String

Iterator<String> iterator = houseAddress.iterator();
while (iterator.hasNext()) {
    out.println(iterator.next());
}

注意:正如我在另一个答案中提到的,您甚至可以为此使用增强的for循环


1
ps这是最没有争议的,因为您没有在此处进行任何不必要的转换,例如将ArrayList转换为Array,然后将其转换为字符串以进行打印
Ishan Srivastava


1

如果将@Override公共字符串toString()用作注释,则结果将与您相同。但是,如果您实现toString()方法,它将起作用。

公共类PrintingComplexArrayList {

public static void main(String[] args) {
    List houseAddress = new ArrayList();
    insertAddress(houseAddress);
    printMe1(houseAddress);
    printMe2(houseAddress);
}

private static void insertAddress(List address)
{
    address.add(new Address(1));
    address.add(new Address(2));
    address.add(new Address(3));
    address.add(new Address(4));
}
private static void printMe1(List address)
{
    for (int i=0; i<address.size(); i++)
        System.out.println(address.get(i));
}

private static void printMe2(List address)
{
    System.out.println(address);
}

}

类地址{private int addr; 公共地址(int i){addr = i; }

@Override public String toString()
{
    Integer iAddr = new Integer (addr);
    return iAddr.toString();
}

}


1

您甚至可以使用增强的for循环或迭代器,例如:

for (String name : houseAddress) {
    System.out.println(name);
}

您可以将其更改为任何数据类型houseAddress,并且可以避免不必要的转换


1

JSON格式

另一种解决方案可能是将列表转换为JSON格式并打印Json-String。优点是格式良好且易于阅读的Object-String,而无需实现toString()。Additionaly它可以用于任何其他ObjectCollection实时运行。

使用Google的Gson的示例:

import com.google.gson.Gson;
import com.google.gson.GsonBuilder;

...
public static void printJsonString(Object o) {
    GsonBuilder gsonBuilder = new GsonBuilder();
    /*
     * Some options for GsonBuilder like setting dateformat or pretty printing
     */
    Gson gson = gsonBuilder.create();
    String json= gson.toJson(o);
    System.out.println(json);
}

0

确保您在房屋地址类中具有吸气剂,然后使用:

for(int i = 0; i < houseAddress.size(); i++) {   
    System.out.print(houseAddress.get(i)**.getAddress()**);
}

1
欢迎使用Stack Overflow。请查看“如何回答”部分,并相应地编辑问题。
compor


0

假设houseAddress.get(i)ArrayList,你可以添加toString()ArrayList

for(int i = 0; i < houseAddress.size(); i++) {   
    System.out.print(houseAddress.get(i).toString());
} 

一个一般的例子:

ArrayList<Double> a = new ArrayList();
a.add(2.);
a.add(32.);
System.out.println(a.toString());
// output
// [2.0, 32.0]

0

这是一个在ArrayList中添加值并打印ArrayList值的简单代码

public class Samim {

public static void main(String args[]) {
    // Declare list
    List<String> list = new ArrayList<>();

    // Add value in list
    list.add("First Value ArrayPosition=0");
    list.add("Second Value ArrayPosition=1");
    list.add("Third Value ArrayPosition=2");
    list.add("Fourth Value ArrayPosition=3");
    list.add("Fifth Value ArrayPosition=4");
    list.add("Sixth Value ArrayPosition=5");
    list.add("Seventh Value ArrayPosition=6");

    String[] objects1 = list.toArray(new String[0]);

    // Print Position Value
    System.err.println(objects1[2]);

    // Print All Value
    for (String val : objects1) {
        System.out.println(val);
      }
    }
}
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.