Java Collection的toString方法详解
1. 概述
在Java中,Collection
是一个接口,用于表示一组对象的集合,例如List
、Set
和Queue
等。Collection
接口定义了一系列操作集合的方法,其中之一就是toString()
方法。
toString()
方法是一个公共方法,用于返回对象的字符串表示形式。在Collection
接口中,toString()
方法用于将集合转换成字符串,并返回表示集合内容的字符串。
本文将详细讲解Collection
接口中的toString()
方法,在不同的集合类型中的具体实现和使用情况。
2. Collection
接口
在开始讲解toString()
方法之前,让我们先来了解一下Collection
接口的层次结构。
Collection
接口继承自Iterable
接口,Iterable
接口定义了一个用于迭代集合元素的方法iterator()
。
Collection
接口下面有多个子接口和实现类,其中一些常用的包括:List
、Set
、Queue
、Map
等。
3. Collection
的toString()
方法
Collection
接口中的toString()
方法的定义如下:
public interface Collection<E> {
// ...
String toString();
// ...
}
根据接口定义,toString()
方法返回一个字符串,表示集合的内容。具体来说,返回的字符串格式为:[element1, element2, ..., elementN]
,其中element1
到elementN
是集合中的元素。
4. ArrayList
的toString()
方法
让我们来看一个具体的实现类,ArrayList
,它实现了List
接口,并继承了AbstractList
类。
ArrayList
类中的toString()
方法的源代码如下:
public class ArrayList<E> extends AbstractList<E> implements List<E>, RandomAccess, Cloneable, Serializable {
// ...
public String toString() {
Iterator<E> it = iterator();
if (! it.hasNext())
return "[]";
StringBuilder sb = new StringBuilder();
sb.append('[');
for (;;) {
E e = it.next();
sb.append(e == this ? "(this Collection)" : e);
if (! it.hasNext())
return sb.append(']').toString();
sb.append(',').append(' ');
}
}
// ...
}
ArrayList
类中的toString()
方法首先创建一个StringBuilder
对象,用于构建最终的字符串。
然后,通过迭代器遍历集合中的元素。如果集合为空,直接返回一个空字符串"[]"
。
如果集合不为空,就通过迭代器逐个获取元素。在将元素添加到StringBuilder
之前,会先判断该元素是否引用了集合本身。如果元素是集合本身,则在字符串中将其表示为(this Collection)
,否则直接将元素添加到字符串中。
最后,通过在字符串末尾添加]
,并将StringBuilder
转换成字符串,返回最终的结果。
以下是使用ArrayList
的toString()
方法的示例代码:
import java.util.ArrayList;
public class Main {
public static void main(String[] args) {
ArrayList<Integer> list = new ArrayList<>();
list.add(1);
list.add(2);
list.add(3);
System.out.println(list.toString());
}
}
输出结果为:
[1, 2, 3]
5. HashSet
的toString()
方法
接下来,让我们看看另一个常用的集合类HashSet
的toString()
方法的实现。
HashSet
类是Set
接口的一个实现,在内部使用HashMap
来存储元素。
HashSet
类中的toString()
方法的源代码如下:
public class HashSet<E> extends AbstractSet<E> implements Set<E>, Cloneable, Serializable {
// ...
public String toString() {
Iterator<E> it = iterator();
if (! it.hasNext())
return "[]";
StringBuilder sb = new StringBuilder();
sb.append('[');
for (;;) {
E e = it.next();
sb.append(e == this ? "(this Collection)" : e);
if (! it.hasNext())
return sb.append(']').toString();
sb.append(',').append(' ');
}
}
// ...
}
HashSet
类中的toString()
方法的实现与`ArrayList