打印数组列表

Posted

技术标签:

【中文标题】打印数组列表【英文标题】:Print ArrayList 【发布时间】:2012-03-05 03:52:55 【问题描述】:

我有一个包含 Address 对象的 ArrayList。

我如何打印这个 ArrayList 的值,这意味着我正在打印 Array 的内容,在这种情况下是数字。

我只能用这段代码让它打印出数组的实际内存地址:

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

【问题讨论】:

你想要内存中的地址位置吗? 对不起,我不明白你的意思。 arraylist 正在存储指向数组的地址,我想打印数组的内容,但我不知道该怎么做。 我试图改写问题以使其更清楚。 地址,他的意思是房子地址。我想。 请给我们houseAddress变量的声明,以及它包含的元素的一些示例代码。 【参考方案1】:

您是说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)));

【讨论】:

【参考方案2】:

由于您没有为 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

Address对象的toString()toString()会被调用

【讨论】:

【参考方案3】:

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

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

【讨论】:

这仅适用于数组,不适用于数组列表。您不能提供houseAddress 作为Arrays.toString() 的参数,因为它不是数组类型。 在我看来循环是唯一可能的出路,如果有人知道更好的选择,请分享。【参考方案4】:

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

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

【讨论】:

@Mr.Goose 我不太清楚你的问题,你是什么意思? 调用 .toString() 是多余的。【参考方案5】:
public void printList(ArrayList<Address> list)
    for(Address elem : list)
        System.out.println(elem+"  ");
    

【讨论】:

这与 OPs 当前代码没有什么不同。问题依然存在。【参考方案6】:

你可以简单地给它:

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

您的输出将类似于[address1, address2, address3]

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

希望这会有所帮助。

【讨论】:

【参考方案7】:

我不确定我是否理解地址的概念(我在这里假设 houseAddress),但如果您正在寻找打印 ArrayList 的方法,那么您可以:

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

【讨论】:

【参考方案8】:

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

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

【讨论】:

同样的输出由 System.out.println(list) 打印; 这里的列表是 houseAddress:Arrays.toString(houseAddress.toArray()) AbstractCollection 已经覆盖 toString() 以打印其元素的内容。因此,只需 list.toString() 打印其所有元素的 toString()。这适用于所有集合。【参考方案9】:

这对我有帮助:

System.out.println(Arrays.toString(codeLangArray.toArray()));

【讨论】:

【参考方案10】:

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() 强制以一种格式打印列表。

【讨论】:

【参考方案11】:

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

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

【讨论】:

【参考方案12】:

您可以使用迭代器。这是在这里做的最简单,争议最小的事情。假设houseAddress 具有数据类型String 的值

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

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

【讨论】:

附注争议最小,因为您没有在这里进行任何不必要的转换,例如将 ArrayList 转换为 Array,然后将其转换为字符串以打印它【参考方案13】:

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

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

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

【讨论】:

【参考方案14】:

你有一个这样的数字列表

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);

【讨论】:

【参考方案15】:

如果您将@Override public String toString() 设为 cmets, 你会得到和你一样的结果。 但是如果你实现你的 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);

班级地址 私人 int 地址; 公共地址(int i) 地址 = 我;

@Override public String toString()

    Integer iAddr = new Integer (addr);
    return iAddr.toString();

【讨论】:

【参考方案16】:

确保您在 House address 类中有一个 getter,然后使用:

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

【讨论】:

欢迎来到Stack Overflow。请相应地查看How to Answer 部分和edit 您的问题。【参考方案17】:

如果您只想在控制台上打印元素,可以使用打印格式。

for(int i = 0; i < houseAddress.size(); i++)    
    System.out.printf("%s", houseAddress.get(i));
  

【讨论】:

【参考方案18】:
 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()));
    

【讨论】:

【参考方案19】:

假设houseAddress.get(i)ArrayList,您可以在ArrayList 之后添加toString()

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]

【讨论】:

【参考方案20】:

这是在 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);
      
    

【讨论】:

【参考方案21】:

打印 ArrayList 的最简单方法是使用 toString

List<String> a=new ArrayList<>();
    a.add("111");
    a.add("112");
    a.add("113");
    System.out.println(a.toString());

输出

[111, 112, 113]

【讨论】:

我认为在这种情况下不需要 toString 。 ArrayList 覆盖 AbstractCollection 类,因此它将负责打印值【参考方案22】:

JSON

另一种解决方案是将您的列表转换为 JSON 格式并打印 Json-String。优点是格式良好且可读的对象字符串,无需实现toString()。此外,它适用于任何其他ObjectCollection

使用谷歌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);

【讨论】:

【参考方案23】:
    将 toString() 方法添加到您的类中 houseAddress.forEach(System.out::println);

【讨论】:

以上是关于打印数组列表的主要内容,如果未能解决你的问题,请参考以下文章

打印数组列表

通过按钮单击/功能从数组打印列表?

从for循环Python打印数字列表作为数组

怎么将python中的数组全部打印出来array

三种方法打印列表(数组)

如何在打印或放入数组时从列表中删除 /n [重复]