Java中的AbstractCollection add()方法:示例
在Java中,AbstractCollection是所有集合类的抽象基类。它实现了大多数的集合接口方法,让子类只需要继承它并根据自身特性实现少数接口方法即可。其中就包含了add方法。
在AbstractCollection类中,add方法的定义如下:
public boolean add(E e) {
throw new UnsupportedOperationException();
}
这里定义了一个抛出UnsupportedOperationException异常的方法。子类必须实现它才能使用。
下面我们来看一个ArrayList的示例,它继承了AbstractCollection,并实现了add方法:
import java.util.AbstractCollection;
import java.util.ArrayList;
public class MyList extends AbstractCollection<String> {
private ArrayList<String> list = new ArrayList<>();
@Override
public boolean add(String str) {
return list.add(str);
}
@Override
public int size() {
return list.size();
}
@Override
public String toString() {
return list.toString();
}
public static void main(String[] args) {
MyList myList = new MyList();
myList.add("Hello");
myList.add("World");
System.out.println(myList);
}
}
这段代码中,我们自定义了一个集合类MyList,它继承了AbstractCollection类,并实现了add方法。在add方法中,我们调用了ArrayList的add方法来添加元素。同时我们还实现了size方法和toString方法来获取集合大小和输出集合内容。
运行该程序,输出如下:
[Hello, World]
可以看到我们自定义的集合类MyList成功地添加了两个元素,并成功输出了集合内容。
除了ArrayList,其他继承AbstractCollection的集合类也需要实现add方法。例如,HashSet的add方法的定义如下:
public boolean add(E e) {
return map.put(e, PRESENT)==null;
}
该方法将元素作为键值对加入到HashSet的底层HashMap中,并返回添加是否成功。
再例如,LinkedList的add方法的定义如下:
public boolean add(E e) {
linkLast(e);
return true;
}
void linkLast(E e) {
final Node<E> l = last;
final Node<E> newNode = new Node<>(l, e, null);
last = newNode;
if (l == null)
first = newNode;
else
l.next = newNode;
size++;
modCount++;
}
该方法将元素加入到LinkedList的尾部,并返回添加是否成功。
在使用继承了AbstractCollection的自定义集合类时,我们只需要实现即可使用这些集合类与Java内置集合类如ArrayList、HashSet、LinkedList 一样。通过实现add方法可以给集合类添加元素,实现size方法可以获取集合大小。
结论
在Java中,AbstractCollection是所有集合类的抽象基类。熟练掌握继承它的子类中add方法的实现方式,能更加灵活地使用Java内置集合类或自定义集合类,提高代码的可重用性、可扩展性。