Java集合類總結 (一)

集合類中的基本接口php

集合類中最基礎的接口是Collection:css

public interface Collection<E>
{
    boolean add(E element);
    Iterator<E> iterator();
}

add方法加一個元素到集合中,若是改變了集合則返回true,若是集合未改變則返回false。例如,若是試圖向set中加入一個已經存在其中的對象是,此add接口將返回false,由於set不容許加入重複的對象,故你沒有改變集合。html

 

iterator方法返回用來遍歷集合的對象,其實現了接口Iterator,看一下Iterator的定義:java

public interface Iterator<E>
{
    E next();
    boolean hasNext();
    void remove();
}

 

「for each」語法能夠用於全部實現了Iterable接口的對象,其Iterable接口也只是包括了一個返回實現了Iterator對象的方法:node

public interface Iterable<E>
{
    Iterator<E> iterator();
}

Collection接口擴展了Iterable接口,因此全部Collection均可以使用for each語法遍歷。nginx

 

Iterator接口方法介紹

關於Iterator接口的next方法,當你調用一次next方法後,Iterator會跳到下一個元素的後面,並返回所跳過元素的引用,以下圖:
git

關於Iterator接口的remove方法,它會移除上一次調用next所返回的元素,也就是會移除剛剛Iterator跳過的那個元素。github

移除collection中首個元素:web

Iterator<String> it = c.iterator();
it.next(); //Skip over the first element
it.remove(); // now remove it

 

可見,next與remove方法是有依賴關係的。若是從沒有調用next就直接調用remove方法,那就是非法操做,並會拋出IllegalStateException異常。
而且連續調用兩次remove,第二次調用也是非法的:ajax

it.remove();
it.remove(); //ERROR!!

你必須在每一次調用remove以前調用next:

it.remove();
it.next();
it.remove(); // OK

 

實現本身的collection類

因爲Collection接口定義了不少的方法,若是本身要實現它,會重複作不少工做,Java類庫準備了不少的抽象類,這些類實現了Collection接口,並實現了部分經常使用的公用的方法,因此當你去實現本身的collection類時,不須要再去從新造輪子了,只須要繼承這些抽象類,並覆蓋那些你須要自定義的方法便可。

public abstract class AbstractCollection<E> implements Collection<E>
{
   . . .
       public abstract Iterator<E> iterator();
       public boolean contains(Object obj)
       {
          for (E element : this) // calls iterator()         
          {    
            if (element.equals(obj))
                return = true;
          }
           return false;
       }
   . . .
}

如上面的抽象類實現了經常使用方法contains。

相關文章
相關標籤/搜索