Java中的AbstractCollection toString()方法及示例
在Java中,AbstractCollection
是Collection
接口的一个抽象类,它提供了一些通用的方法来实现Collection
接口。其中,toString()
方法就是其中之一,在本文中,我们将详细讨论Java中的AbstractCollection
的toString()
方法及其实现方式,同时给出一些示例。
AbstractCollection的toString()方法
AbstractCollection
中的toString()
方法声明如下:
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(' ');
}
}
通过这段代码,我们可以了解到toString()
方法实际上是一个迭代器,在迭代集合中的元素,并将其转换成一个字符串。其实现方法也很简单,只需先将起始字符设为[
,然后不断遍历元素,将其添加到字符串中,并在元素之间插入逗号和空格。最后,在末尾加上]
字符,就生成了一个完整的字符串。
示例
下面是一个简单的使用示例:
import java.util.ArrayList;
public class TestAbstractCollectionToString {
public static void main(String[] args) {
ArrayList<String> list = new ArrayList<>();
list.add("apple");
list.add("banana");
list.add("pear");
System.out.println(list.toString());
}
}
这段代码使用了ArrayList
类的实现,并向其中添加了三个字符串元素"apple"
、"banana"
和"pear"
。最后,通过System.out.println()
方法输出了该集合的字符串表示形式:
[apple, banana, pear]
上面的结果是由toString()
方法生成的,其中元素以逗号和空格分隔,并被括在方括号中。需要注意的是,这里的输出结果是由ArrayList
类自己的toString()
方法生成的,而不是由AbstractCollection
的toString()
方法生成的。但是,由于ArrayList
是AbstractCollection
的子类,因此它的toString()
方法隐式地继承了自AbstractCollection
中的实现。
下面是一个更为复杂的示例,它演示了如何在自定义类中使用AbstractCollection
的toString()
方法:
import java.util.AbstractCollection;
import java.util.Iterator;
public class MyCollection<T> extends AbstractCollection<T>{
private T[] array;
private int size;
public MyCollection() {
array = (T[])new Object[10];
size = 0;
}
public boolean add(T element) {
if (size < array.length) {
array[size] = element;
size++;
return true;
}
return false;
}
public Iterator<T> iterator() {
return new MyIterator();
}
public int size() {
return size;
}
private class MyIterator implements Iterator<T> {
private int nextIndex;
public boolean hasNext() {
return nextIndex < size;
}
public T next() {
if (!hasNext())
throw new IndexOutOfBoundsException();
return array[nextIndex++];
}
}
public static void main(String[] args) {
MyCollection<String> collection = new MyCollection<>();
collection.add("apple");
collection.add("banana");
collection.add("pear");
System.out.println(collection.toString());
}
}
在这个示例中,我们定义了一个名为MyCollection
的类,它继承了AbstractCollection
。该类具有一个通用的数组array
和一个计数器size
,用于保存集合中的元素和元素的数量。类中还定义了一个内部类MyIterator
,用于迭代集合中的元素。
在MyCollection
的add()
方法中,我们检查了数组是否已满,如果没满,则将元素添加到数组中,并将计数器加1。另外,我们还实现了iterator()
方法和size()
方法,分别返回一个MyIterator
对象和集合中元素的数量。
在MyIterator
类中,我们实现了必要的迭代方法hasNext()
和next()
,它们用于遍历集合中的元素。hasNext()
方法检查是否还有元素可以遍历,而next()
方法返回当前元素,并将迭代器指针移动到下一个元素。
最后,在main()
方法中,我们创建了一个MyCollection<String>
对象,并向其中添加了三个字符串元素"apple"
、"banana"
和"pear"
。最后,我们通过System.out.println()
方法输出了该集合的字符串表示形式:
[apple, banana, pear]
上述结果与前面的示例结果相同,由AbstractCollection
的toString()
方法生成。
结论
Java中的AbstractCollection
类提供了通用的toString()
方法,用于将集合转换成字符串。它的实现方式很简单,只需遍历集合中的元素,并将它们添加到一个字符串中即可。如果你想在自己的类中使用该方法,只需继承AbstractCollection
类,并实现必要的方法即可。