打印数组列表
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()
。此外,它适用于任何其他Object
或Collection
。
使用谷歌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);
【讨论】:
以上是关于打印数组列表的主要内容,如果未能解决你的问题,请参考以下文章