Java Collection的toString方法详解

1. 概述

在Java中,Collection是一个接口,用于表示一组对象的集合,例如ListSetQueue等。Collection接口定义了一系列操作集合的方法,其中之一就是toString()方法。

toString()方法是一个公共方法,用于返回对象的字符串表示形式。在Collection接口中,toString()方法用于将集合转换成字符串,并返回表示集合内容的字符串。

本文将详细讲解Collection接口中的toString()方法,在不同的集合类型中的具体实现和使用情况。

2. Collection接口

在开始讲解toString()方法之前,让我们先来了解一下Collection接口的层次结构。

Collection hierarchy

Collection接口继承自Iterable接口,Iterable接口定义了一个用于迭代集合元素的方法iterator()

Collection接口下面有多个子接口和实现类,其中一些常用的包括:ListSetQueueMap等。

3. CollectiontoString()方法

Collection接口中的toString()方法的定义如下:

public interface Collection<E> {
    // ...

    String toString();

    // ...
}

根据接口定义,toString()方法返回一个字符串,表示集合的内容。具体来说,返回的字符串格式为:[element1, element2, ..., elementN],其中element1elementN是集合中的元素。

4. ArrayListtoString()方法

让我们来看一个具体的实现类,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转换成字符串,返回最终的结果。

以下是使用ArrayListtoString()方法的示例代码:

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. HashSettoString()方法

接下来,让我们看看另一个常用的集合类HashSettoString()方法的实现。

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