1.1.2.3 Collection接口與Iterator接口
Collection接口的實現(xiàn)類跟Vector相似。要從實現(xiàn)了Collection接口的類的實例中取出保存在其中的元素對象,必須通過Collection接口的Iterator()方法,返回一個Iterator接口。
Iterator接口與Enumeration接口非常相似。該接口的優(yōu)點是其中的方法名比較簡短。
Arraylist類實現(xiàn)了Collection接口
例:將上例改寫為用ArrayList類和Iterator接口來實現(xiàn)。
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())//判斷是否有數(shù)據(jù)時,使用的是hasNext()方法
{
Integer intobj=(Integer)e.next(); //取數(shù)據(jù)時使用next()方法,而不是nextElement()
sum+=intobj.intValue();
}
System.out.println(sum);
}
}
這兩組實現(xiàn)的結(jié)果都是一樣的,那什么時候使用哪種呢?
Vector類中的所有方法都是線程同步的,所有有兩個以上的線程訪問并發(fā)訪問vector對象時,是安全的,但是只有一個線程訪問時,仍然存在同步監(jiān)視器檢查的情況,需要額外的開銷,影響了效率。而ArrayList中的所有方法是不同步的,所以程序中如果不存在多線程安全的問題,則ArrayList比Vector的效率高。如果存在多線程安全的問題,使用ArrayList要自己編寫同步處理,而使用Vector則不要。
Collection,Set,List的區(qū)別如下:
Set,List是Collection的子類。
Collection各元素對象之間沒有指定的順序,允許有重復(fù)元素和多個Null元素對象。所以不可以排序,也不可以找出第幾個第幾個元素。
Set各元素對象之間沒有指定的順序,不允許有重復(fù)元素,最多允許有一個Null元素對象。
List各元素對象之間有指定的順序,允許有重復(fù)元素和多個Null元素對象。
import java.util.*;
public class TestSort
{
public static void main(String[] args)
{
ArrayList al=new ArrayList(); //新建一個arraylist ,由于它也實現(xiàn)了list接口,所以可以進行排序
al.add(new Integer(1));
al.add(new Integer(3));
al.add(new Integer(2)); //添加三個數(shù)字,隨便添加,沒有排序
System.out.println(al.toString()); //打印
Collections.sort(al); //排序
/*Collections類本身并不是一個集合類,它只是提供了各種方法來操作集合類*/
System.out.println(al.toString());
}
}
相關(guān)推薦:2010年9月計算機等級考試試題及答案解析專題北京 | 天津 | 上海 | 江蘇 | 山東 |
安徽 | 浙江 | 江西 | 福建 | 深圳 |
廣東 | 河北 | 湖南 | 廣西 | 河南 |
海南 | 湖北 | 四川 | 重慶 | 云南 |
貴州 | 西藏 | 新疆 | 陜西 | 山西 |
寧夏 | 甘肅 | 青海 | 遼寧 | 吉林 |
黑龍江 | 內(nèi)蒙古 |