集合類

框架圖鎮博

一個集合對象或一個容器表示一組對象,集合中的對象稱爲元素。

上述所有的集合類,都實現了Iterator接口,這是一個用於遍歷集合中元素的接口,主要包含hashNext(),next(),remove()三種方法。它的一個子接口LinkedIterator在它的基礎上又添加了三種方法,分別是add(),previous(),hasPrevious()。也就是說如果是先Iterator接口,那麼在遍歷集合中元素的時候,只能往後遍歷,被遍歷後的元素不會在遍歷到,通常無序集合實現的都是這個接口,比如HashSet,HashMap;而那些元素有序的集合,實現的一般都是LinkedIterator接口,實現這個接口的集合可以雙向遍歷,既可以通過next()訪問下一個元素,又可以通過previous()訪問前一個元素,比如ArrayList。

怎麼理解呢,我的理解就是集合類就相當於動態數組。無非java將幾種常用的數據結構分爲幾種不同的集合類,再配合泛型進行使用,規範了數組的輸入和使用。

我們來細分一下結構圖

Collection是最基本的集合接口,一個Collection代表一組Object,即Collection的元素(Elements)。Java SDK不提供直接繼承自Collection的類,Java SDK提供的類都是繼承自Collection的“子接口”如List和Set。
我們先來講講相對簡易的List.
List 接口繼承了 Collection 接口以定義一個允許重複項的有序集合

//存取函數
void add(int index, Object element) 
boolean addAll(int index, Collection collection) 
Object get(int index) 
Object remove(int index) 
Object set(int index, Object element) 

//查找函數
int indexOf(Object element) 
int lastIndexOf(Object element) 

//遍歷
ListIterator listIterator() 
ListIterator listIterator(int startIndex) 

//截取子列
List subList(int fromIndex, int toIndex)

實例代碼:

  public static void main(String args[])
       {
           List<String> list1=new ArrayList<String>();     
           list1.add("週二");
           list1.add(1,"張三");
           list1.add("李四"); 
           Iterator<String>Itr=list1.iterator();
           while(Itr.hasNext())
            System.out.println(Itr.next().toString());
           System.out.println("-----------------");
           list1.set(0, "王五");
           Itr=list1.iterator();
           while(Itr.hasNext())
            System.out.println(Itr.next().toString());
           list1.remove(1);
           System.out.println("-----------------");
           Itr=list1.iterator();
           while(Itr.hasNext())
            System.out.println(Itr.next().toString());
           list1.addAll(list1);
           System.out.println("-----------------");
           Itr=list1.iterator();
           while(Itr.hasNext())
            System.out.println(Itr.next().toString());
           list1.removeAll(list1);

       }

運行結果:

Set

public interface Set<E>extends Collection<E>
{
    int size();
    boolean contains(E);
    boolean add(E);
    boolean remove(E);
    Iterator<E> iterator();

    //批處理操作
    boolean containAll(Collection<?> c);
    boolean addAll(Collection<?> c);
    boolean removeAll(Collection<?>c);
    //使當前集合只保留c的元素
    boolean retainAll(Collection<?>c);


     void clear();

}

具體使用方法和List沒有太大的差別,值得注意的是:
Set接口有三個使用的類,即:

 //HashSet是無序的存儲。訪問效率快
 Set<String> s =new HashSet<String>();
 //TreeSet中實現了SortedSet,可進行升序排列
 Set<String> s=new TreeSet<String>();
 //LinkHashSet具有固定的順序
 Set<String> s=new LinkedHashSet<String>();

//其實所有的集合類都可以用Collection中的排序方法進行排序 後來會細講

至於Queen用的不是很多,就不多說了。

再來看看比較常用的Map

常用操作:

//返回值是被替換的值。
Object put(Object key, Object value);
Object remove(Object key);
void putAll(Map mapping);
void clear();

Object get(Object key);
boolean containsKey(Object key);
boolean containsValue(Object value);
int size();
boolean isEmpty();


//下面的方法允許您把鍵或值的組作爲集合來處理
public Set keySet();
public Collection values();
public Set entrySet();

引用方法

//有序樹,存在SortedMap結口
Map<String,String>m= new TreeMap<String,String>();
//無序樹,並允許有空的鍵值
Map<String,String>m= new HashMap<String,String>();
//同步的HashTable
Map<String,String>m= new Hashtable<String,String>();

這裏面最大的問題就是:
HashMap和Map的區別。ArrayList和List的區別
答:Map,List都只是接口,一個沒有被實現的抽象類,Java 集合框架中一部分,用於存儲鍵值對,HashMap,ArrayList是用哈希算法實現Map,List的實用類。

發佈了36 篇原創文章 · 獲贊 51 · 訪問量 3萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章