![](https://csdnimg.cn/release/download_crawler_static/10694404/bg5.jpg)
4
if (o.equals(e.next())) return true;
}
return false;
}
public Object[] toArray() { //将聚集中的元素,转换为数组
Object[] result = new Object[size()]; //主要利用接口中的 size、iterator 方法
Iterator<E> e = iterator();
for (int i=0; e.hasNext(); i++)
result[i] = e.next();
return result;
}
public <T> T[] toArray(T[] a) { //将聚集中的元素,转换为指定类型的数组
int size = size();
if (a.length < size) //当指定数组长度小于聚集中元素的数目时,创建指定类型的数组
a = (T[])java.lang.reflect.Array.newInstance(a.getClass().getComponentType(), size);
//利用 java 的反射机制,根据输入数组的类型,创建和聚集相同容量的指定类型的数组
//然后将聚集中的内容,利用 iterator 接口将其放入数组中
Iterator<E> it=iterator();
Object[] result = a;
for (int i=0; i<size; i++)
result[i] = it.next();
if (a.length > size) a[size] = null; //这是干什么的啊?仔细想想吧!有什么问题吗
return a;
}
//以上方法中返回数组的长度至少等于聚集类元素的个数
//当指定数组的长度小于聚集内元素的个数时,创建与其元素个数相同的指定类型的数组
//放入元素,并返回之;当指定数组的长度大于聚集中元素的数目时,作者让第 n+1 个元素为 null,
//是否合理呢!!
//若聚集内部有 n 个元素,指定数组长度大于 n,且指定数组在以前的操作中,全放满了元素,
//调用该方法后会是怎样呢??首先是指定元素中的前 n 个元素被聚集中的 n 个元素覆盖,
//第 n+1 个元素,被设置为 null,即丢弃了,其它后面的保存原来的!怪不怪啊!
//一般使用此方法时,指定数组为只有一个元素的数组,该数组仅仅为了指定返回数组的类型
// 修改操作
public boolean add(E e) { //消极实现增加元素的方法
throw new UnsupportedOperationException();
}
public boolean remove(Object o) { //删除指定的元素
Iterator<E> e = iterator(); //主要依靠 iterator 接口,完成遍列
if (o==null) {
while (e.hasNext()) {
if (e.next()==null) { //聚集中可以包含 null 值哦
e.remove();