天天看點

Collection接口與Iterator接口

Collection接口的實作類跟Vector相似。要從實作了Collection接口的類的執行個體中取出儲存在其中的元素對象,必須通過Collection接口的Iterator()方法,傳回一個Iterator接口。

Iterator接口與Enumeration接口非常相似。該接口的優點是其中的方法名比較簡短。

Arraylist類實作了Collection接口

例:将上例改寫為用ArrayList類和Iterator接口來實作。

import java.util.*;

public class TestCollection

{

public static void main(String[] args)

ArrayList v=new ArrayList();

int b=0;

int num=0;

System.out.println("Please enter number:");

while(true)

try

b=System.in.read();

}

catch(Exception e)

e.printStackTrace();

if(b=='\r'||b=='\n')

break;

else

num=b-'0';

v.add(new Integer(num)); //方法為add()而不是addelement()

int sum=0;

Iterator e=v.iterator();

while(e.hasNext())//判斷是否有資料時,使用的是hasNext()方法

Integer intobj=(Integer)e.next(); //取資料時使用next()方法,而不是nextElement()

sum+=intobj.intValue();

System.out.println(sum);

這兩組實作的結果都是一樣的,那什麼時候使用哪種呢?

Vector類中的所有方法都是線程同步的,所有有兩個以上的線程通路并發通路vector對象時,是安全的,但是隻有一個線程通路時,仍然存在同步螢幕檢查的情況,需要額外的開銷,影響了效率。而ArrayList中的所有方法是不同步的,是以程式中如果不存在多線程安全的問題,則ArrayList比Vector的效率高。如果存在多線程安全的問題,使用ArrayList要自己編寫同步處理,而使用Vector則不要。

Collection,Set,List的差別如下:

Set,List是Collection的子類。

Collection各元素對象之間沒有指定的順序,允許有重複元素和多個Null元素對象。是以不可以排序,也不可以找出第幾個第幾個元素。

Set各元素對象之間沒有指定的順序,不允許有重複元素,最多允許有一個Null元素對象。

List各元素對象之間有指定的順序,允許有重複元素和多個Null元素對象。

public class TestSort

ArrayList al=new ArrayList();  //建立一個arraylist ,由于它也實作了list接口,是以可以進行排序

al.add(new Integer(1));

al.add(new Integer(3));

al.add(new Integer(2));  //添加三個數字,随便添加,沒有排序

System.out.println(al.toString()); //列印

Collections.sort(al);  //排序

/*Collections類本身并不是一個集合類,它隻是提供了各種方法來操作集合類*/

System.out.println(al.toString());