Java ArrayListtoString()方法实现集合转字符串

1 下载量 24 浏览量 更新于2024-09-02 收藏 80KB PDF 举报
"Java 中的 `toString()` 方法用于将对象转换为字符串表示,通常用于输出对象的关键信息。本文通过一个示例,展示了如何处理 `ArrayList<ArrayList<Integer>>` 集合,将其转换为特定格式的字符串。在示例中,作者遇到了在拼接字符串时,每个子集合之间多出一个空格的问题。通过查看 `toString()` 方法的源码,我们可以理解其行为并找到解决方案。" 在Java中,`toString()` 方法是 `Object` 类的一个成员方法,所有 Java 类都默认继承自 `Object`,因此所有的类都有 `toString()` 方法。此方法的主要作用是返回一个表示该对象状态的字符串。默认的 `toString()` 实现会返回类名、 '@' 符号以及对象哈希码的十六进制表示。对于自定义类,通常需要重写 `toString()` 来提供更有意义的信息。 在上述问题中,作者尝试将一个 `ArrayList<ArrayList<Integer>>` 集合转换为形如 "[1,2,3]#[2,3,5]" 的字符串。首先,他们遍历集合,使用 `toString()` 方法打印单个子集合,然后使用 `StringBuilder` 拼接这些子集合,形成最终的字符串。然而,注意到每个子集合在第二个元素之后都带有额外的空格,这是由于 `ArrayList` 的 `toString()` 方法在元素之间插入了空格。 为了消除这些额外的空格,我们需要修改拼接逻辑或者自定义 `toString()` 方法。一种可能的解决方案是使用 `join()` 方法,这是 `String` 类的一个静态方法,可以将数组或集合的元素连接成一个字符串,且可以指定分隔符。对于当前问题,我们可以这样做: ```java String separator = "#"; String result = String.join(separator, a.stream() .map(ArrayList::toString) .collect(Collectors.toList())); ``` 这里,我们利用了 Java 8 的 Stream API,将 `ArrayList<ArrayList<Integer>>` 转换成 `List<String>`,其中每个元素都是子集合的无空格 `toString()` 表示,然后使用 `join()` 方法将它们连接起来。 另一种解决办法是在自定义类中重写 `toString()` 方法,去除元素之间的空格。例如,如果你有一个名为 `MyList` 的类,你可以这样做: ```java public class MyList extends ArrayList<Integer> { @Override public String toString() { StringBuilder builder = new StringBuilder(); for (Integer item : this) { if (builder.length() > 0) { builder.append(","); } builder.append(item); } return "[" + builder.toString() + "]"; } } ``` 在这个自定义的 `toString()` 方法中,我们不再使用默认的 `toString()` 行为,而是手动构建不带空格的字符串。 总结来说,Java 中的 `toString()` 方法在输出对象信息时非常有用,但有时需要根据具体需求进行定制。通过了解其默认行为和源码,我们可以有效地解决问题,创建符合需求的字符串表示。在处理集合时,合理地使用 `toString()` 和相关工具方法,可以简化代码并提高可读性。