新创建的ArrayList
没有添加任何元素,就像ArrayList
中添加了一个空字符串一样。
这让我觉得新创建的ArrayList
即使没有添加任何元素也会在其中添加默认的空string
或元素。
package cracking;
import java.util.ArrayList;
public class Ask
{
public static void main(String[] args)
{
ArrayList<String> al = new ArrayList<String>();
System.out.println(al.size());//0
System.out.println(al);//[]
al.add("");
System.out.println(al.size());//1
System.out.println(al);//[]
}
}
但是,两种情况下ArrayList
的大小之间的差异使它们不一致,特别是因为打印出的两个ArrayList
看起来一样。
为了保持一致性,我觉得,两个中的任何一个都会很好:
ArrayList
也会使它看起来一样。ArrayList
应该只打印NULL或其他东西而不是像它一样显示[]
现在显示答案 0 :(得分:6)
for (int i = 0; i < nodesAndServices.size(); i++) {
List<Character> eachListRow = nodesAndServices.get(i);
for (Character chr : eachListRow) {
allChars.add(chr);
}
}
的{{1}}实施会让您受到欺骗。见这里:
toString
您的收藏集的大小为1,但它不会打印任何内容,包括逗号字符AbstractCollection
,因为它只有一个。尝试添加multilpe emptry字符串,您将更清楚地看到结果。
public String More ...toString() {
Iterator<E> i = iterator();
if (! i.hasNext())
return "[]";
StringBuilder sb = new StringBuilder();
sb.append('[');
for (;;) {
E e = i.next();
sb.append(e == this ? "(this Collection)" : e);
if (! i.hasNext())
return sb.append(']').toString();
sb.append(", ");
}
}
答案 1 :(得分:2)
[]
代表空列表。这是按照惯例,但我认为你会发现这是合理的。
打印ArrayList
在其包含的每个对象上使用toString
以显示这些内容的打印表示。打印字符串时(使用toString
),引号不包含在中。
考虑对您的代码进行以下修订:
ArrayList<String> al = new ArrayList<String>();
al.add("");
al.add("");
al.add("");
System.out.println(al);//[]
输出结果为:
[, , ]
我们也可能在打印ArrayList
时抱怨使用括号,但请注意,toString
的输出通常仅用于调试,不应依赖于编程。
来自toString
的{{3}}:
通常,toString方法返回一个“文本表示”此对象的字符串。结果应该是一个简洁但信息丰富的表示,便于人们阅读。
对于您的示例,此会分解一下:使用单个空ArrayList<strin>
打印string
并不是特别有用。如果您需要检查/验证收藏品的内容,例如为了进行调试,您还应该打印length
。
答案 2 :(得分:1)
ArrayList
正在使用您在toString
调用中放置的对象的toString
。这看起来很奇怪的原因是因为打印空字符串不打印任何内容。
理想情况下,人们不会选择在列表中存储空字符串,而是会进行检查以确保只有非空字符串才会进入其中。
if(!"".equals(value)) {
al.add(value);
}