java.util.Iterator
public interface Iterator<E>接口类型;
An iterator over a collection说明它是在collection之上的;
Iterator takes the place of Enumeration in the Java collections framework说明在java中用它来替代枚举类型,但它与枚举有两点不同:1.Iterators allow the caller to remove elements from the underlying collection during the iteration with well-defined semantics意思是它的元素可删除;2.Method names have been improved不太明白这个的意思;
boolean hasNext()
@return <tt>true</tt> if the iterator has more elements;
E next()
@return the next element in the iteration
@exception NoSuchElementException iteration has no more elements;
void remove()
Removes from the underlying collection the last element returned by the iterator (optional operation). This method can be called only once per call to <tt>next</tt>. The behavior of an iterator is unspecified if the underlying collection is modified while the iteration is in progress in any way other than by calling this method
* @exception UnsupportedOperationException if the <tt>remove</tt>
* operation is not supported by this Iterator.
* @exception IllegalStateException if the <tt>next</tt> method has not
* yet been called, or the <tt>remove</tt> method has already
* been called after the last call to the <tt>next</tt> * method.
这个方法要求每执行一次next再执行一次remove
java.util.Iterable
public interface Iterable<T>接口类型
Implementing this interface allows an object to be the target of the "foreach" statement
Iterator<T> iterator()
@return an Iterator
Returns an iterator over a set of elements of type T
java.util.Collection
public interface Collection<E> extends Iterable<E>接口类型
The root interface in the <i>collection hierarchy</i>是集合类的根节点接口;它没有直接实现类,只有子接口Set和List;实现它的类有两个构造器:a void (no arguments) constructor和a constructor with a single argument of type <tt>Collection</tt>;throw <tt>UnsupportedOperationException</tt> if this collection does not support the operation调用不支持的方法抛这个异常;如何调用无效方法则不一定会不会抛这个异常;Attempting to add an ineligible element throws an unchecked exception, typically <tt>NullPointerException</tt> or <tt>ClassCastException</tt>
以下均是Query Operations:
int size()
@return the number of elements in this collection如果这个值大于Integer.MAX_VALUE,则返回Integer.MAX_VALUE的值
boolean isEmpty()
@return <tt>true</tt> if this collection contains no elements判断集合是否为空,是则返回true
boolean contains(Object o)
满足表达式(o==null ? e==null : o.equals(e)),其中e为collection中的某一元素
* @param o element whose presence in this collection is to be tested
* @return <tt>true</tt> if this collection contains the specified
* element
* @throws ClassCastException if the type of the specified element
* is incompatible with this collection (optional)
* @throws NullPointerException if the specified element is null and this
* collection does not permit null elements (optional)
Iterator<E> iterator()
@return an <tt>Iterator</tt> over the elements in this collection不保证返回元素的顺序
Object[] toArray()
@return an array containing all of the elements in this collection返回顺序与它的Iterator一致,返回的是一个新的数组,可任意修改,这个方法是Array和Conllection API之间的桥梁
<T> T[] toArray(T[] a)
* @param a the array into which the elements of this collection are to be
* stored, if it is big enough; otherwise, a new array of the same
* runtime type is allocated for this purpose.
* @return an array containing all of the elements in this collection
* @throws ArrayStoreException if the runtime type of the specified array
* is not a supertype of the runtime type of every element in
* this collection
* @throws NullPointerException if the specified array is null
以下均是Modification Operations:
boolean add(E e)
* @param e element whose presence in this collection is to be ensured
* @return <tt>true</tt> if this collection changed as a result of the
* call
* @throws UnsupportedOperationException if the <tt>add</tt> operation
* is not supported by this collection
* @throws ClassCastException if the class of the specified element
* prevents it from being added to this collection
* @throws NullPointerException if the specified element is null and this
* collection does not permit null elements
* @throws IllegalArgumentException if some property of the element
* prevents it from being added to this collection
* @throws IllegalStateException if the element cannot be added at this
* time due to insertion restrictions
boolean remove(Object o)
* @param o element to be removed from this collection, if present
* @return <tt>true</tt> if an element was removed as a result of this call
* @throws ClassCastException if the type of the specified element
* is incompatible with this collection (optional)
* @throws NullPointerException if the specified element is null and this
* collection does not permit null elements (optional)
* @throws UnsupportedOperationException if the <tt>remove</tt> operation
* is not supported by this collection
以下均是Bulk Operations:
boolean containsAll(Collection<?> c)
* @param c collection to be checked for containment in this collection
* @return <tt>true</tt> if this collection contains all of the elements
* in the specified collection
* @throws ClassCastException if the types of one or more elements
* in the specified collection are incompatible with this
* collection (optional)
* @throws NullPointerException if the specified collection contains one
* or more null elements and this collection does not permit null
* elements (optional), or if the specified collection is null
* @see #contains(Object)
boolean addAll(Collection<? extends E> c)
* @param c collection containing elements to be added to this collection
* @return <tt>true</tt> if this collection changed as a result of the call
* @throws UnsupportedOperationException if the <tt>addAll</tt> operation
* is not supported by this collection
* @throws ClassCastException if the class of an element of the specified
* collection prevents it from being added to this collection
* @throws NullPointerException if the specified collection contains a
* null element and this collection does not permit null elements,
* or if the specified collection is null
* @throws IllegalArgumentException if some property of an element of the
* specified collection prevents it from being added to this
* collection
* @throws IllegalStateException if not all the elements can be added at
* this time due to insertion restrictions
* @see #add(Object)
boolean removeAll(Collection<?> c)
* @param c collection containing elements to be removed from this collection
* @return <tt>true</tt> if this collection changed as a result of the
* call
* @throws UnsupportedOperationException if the <tt>removeAll</tt> method
* is not supported by this collection
* @throws ClassCastException if the types of one or more elements
* in this collection are incompatible with the specified
* collection (optional)
* @throws NullPointerException if this collection contains one or more
* null elements and the specified collection does not support
* null elements (optional), or if the specified collection is null
* @see #remove(Object)
* @see #contains(Object)
boolean retainAll(Collection<?> c)
* @param c collection containing elements to be retained in this collection
* @return <tt>true</tt> if this collection changed as a result of the call
* @throws UnsupportedOperationException if the <tt>retainAll</tt> operation
* is not supported by this collection
* @throws ClassCastException if the types of one or more elements
* in this collection are incompatible with the specified
* collection (optional)
* @throws NullPointerException if this collection contains one or more
* null elements and the specified collection does not permit null
* elements (optional), or if the specified collection is null
* @see #remove(Object)
* @see #contains(Object)
void clear()
* @throws UnsupportedOperationException if the <tt>clear</tt> operation
* is not supported by this collection
以下均是Comparison and hashing:
boolean equals(Object o)
* @param o object to be compared for equality with this collection
* @return <tt>true</tt> if the specified object is equal to this
* collection
*
* @see Object#equals(Object)
* @see Set#equals(Object)
* @see List#equals(Object)
int hashCode()
* @return the hash code value for this collection
*
* @see Object#hashCode()
* @see Object#equals(Object)
java.util.AbstractCollection
public abstract class AbstractCollection<E> implements Collection<E>实现collection接口的抽象类
扩展此类,并提供iterator和size方法的实现,则可以获得一个不可修改的collection;如果还实现了add和remove方法,则可以获得一个可修改的collection;根据Collection接口的建议要实现一个void和Collection构造器;子类可以重写已实现的方法
唯一的构造器:
protected AbstractCollection() {}
以下均是Query Operations:
public abstract Iterator<E> iterator()
由继承的子类实现
public abstract int size()
由继承的子类实现
public boolean isEmpty() { return size() == 0; }
这个表达式为true,说明collection为空
public boolean contains(Object o) { Iterator<E> e = iterator(); if (o==null) { while (e.hasNext()) if (e.next()==null) return true; } else { while (e.hasNext()) if (o.equals(e.next())) return true; } return false; }
先判断o是否为null,再找collection里有没有null,再找collection里和o相同的项
public Object[] toArray() { // Estimate size of array; be prepared to see more or fewer elements Object[] r = new Object[size()]; Iterator<E> it = iterator(); for (int i = 0; i < r.length; i++) { if (! it.hasNext()) // fewer elements than expected return Arrays.copyOf(r, i); r[i] = it.next(); } return it.hasNext() ? finishToArray(r, it) : r; }
如果迭代过程中collection发生变化,返回数据的长度总是等于迭代器返回的数目
public <T> T[] toArray(T[] a) { // Estimate size of array; be prepared to see more or fewer elements int size = size(); T[] r = a.length >= size ? a : (T[])java.lang.reflect.Array .newInstance(a.getClass().getComponentType(), size); Iterator<E> it = iterator(); for (int i = 0; i < r.length; i++) { if (! it.hasNext()) { // fewer elements than expected if (a != r) return Arrays.copyOf(r, i); r[i] = null; // null-terminate return r; } r[i] = (T)it.next(); } return it.hasNext() ? finishToArray(r, it) : r; }
如果a大于collection长度,则就返回a,否则返回一个新建数组;
如果a大于collection长度,则用null填补剩余的数组值;
private static <T> T[] finishToArray(T[] r, Iterator<?> it) { int i = r.length; while (it.hasNext()) { int cap = r.length; if (i == cap) { int newCap = ((cap / 2) + 1) * 3; if (newCap <= cap) { // integer overflow if (cap == Integer.MAX_VALUE) throw new OutOfMemoryError ("Required array size too large"); newCap = Integer.MAX_VALUE; } r = Arrays.copyOf(r, newCap); } r[i++] = (T)it.next(); } // trim if overallocated return (i == r.length) ? r : Arrays.copyOf(r, i); }
是个静态函数
如果迭代器返回的数目比期望的多,这个函数可以重新规划数组长度,规则是:大约扩大1.5倍,可见newCap一般是比cap大的,如果出现newCap <= cap的情况,表明发生integer overflow了,就是整型溢出
以下均是Modification Operations:
public boolean add(E e) { throw new UnsupportedOperationException(); }
总是抛这个异常
public boolean remove(Object o) { Iterator<E> e = iterator(); if (o==null) { while (e.hasNext()) { if (e.next()==null) { e.remove(); return true; } } } else { while (e.hasNext()) { if (o.equals(e.next())) { e.remove(); return true; } } } return false; }
分null和非null两种情况,因为null的Object不能用equals方法
以下均是Bulk Operations:
public boolean containsAll(Collection<?> c) { Iterator<?> e = c.iterator(); while (e.hasNext()) if (!contains(e.next())) return false; return true; }
循环调用contains方法
public boolean addAll(Collection<? extends E> c) { boolean modified = false; Iterator<? extends E> e = c.iterator(); while (e.hasNext()) { if (add(e.next())) modified = true; } return modified; }
如果不重写add方法,总是会抛UnsupportedOperationException异常
public boolean removeAll(Collection<?> c) { boolean modified = false; Iterator<?> e = iterator(); while (e.hasNext()) { if (c.contains(e.next())) { e.remove(); modified = true; } } return modified; }
删除的是e中与c相同的项,保留与c不同的项
public boolean retainAll(Collection<?> c) { boolean modified = false; Iterator<E> e = iterator(); while (e.hasNext()) { if (!c.contains(e.next())) { e.remove(); modified = true; } } return modified; }
删除的是e中与c不同的项,保留与c相同的项
public void clear() { Iterator<E> e = iterator(); while (e.hasNext()) { e.next(); e.remove(); } }
删除全部项
以下均是String conversion:
public String toString() { Iterator<E> i = iterator(); if (! i.hasNext()) return "[]"; StringBuilder sb = new StringBuilder(); sb.append('['); for (;;) { E e = i.next(); sb.append(e == this ? "(this Collection)" : e); if (! i.hasNext()) return sb.append(']').toString(); sb.append(", "); } }
输出形式类似为:["1","2","3"]