Posted on 2006-09-24 22:31
kook 閱讀(1950)
評論(1) 編輯 收藏 所屬分類:
J2SE
他是List接口的實現類。ArrayList類相當于是一個動態數組。
Methods:
1、?
void add
(Object obj)
往ArrayList的對象里增加一個元素
2、?
set
(int?index,
Object
?element)
用指定的元素替代此列表中指定位置上的元素。
3、?
int size
()
獲得ArrayList的對象中元素的個數。
4、?
get
(int index)
返回ArrayList的對象中索引為index的元素。
5、?
Object
[]
toArray
()
將ArrayList的對象中的元素返回到一個對象數組中。
PS
:Arrays.asList(Object[] objs);
???
返回一個受指定數組支持的固定大小的列表。
?????
?
toArray
方法是將一個List對象轉成一個數組,而Arrays.asList方法是將一個數組轉成一個List。他們是集合和數組之間的橋梁,有時候方法中的參數可能需要數組或者List的時候,就可以用到他們轉換,而不用去重新創建實例。
6、?
iterator()
返回一個迭代器。所有繼承Collection接口的接口或者這些接口的實現類,都有這個方法。通過List接口對象返回的迭代器沒有實現iterator接口中的remove方法。凡是沒有實現iterator接口中的remove方法,都會拋出一個
UnsupportedOperationException
(不支持的操作)異常。如:
?
1
List?l?
=
?
null
;???????????????
//
List?接口對象l?
2
3
Iterator?it?
=
?l.iterator();??
//
?通過List接口對象l返回的迭代器it?
4
5
it.next();???????????????????
//
it?有next方法?
6
7
it.remove();????????????????????
//
?這里會拋出?UnsupportedOperationException?
8
9
PS
:迭代器的作用:
??
他可以以一種通用的方式去訪問集合中的所有元素。在ArrayList類中可以通過get方法去訪問,但是有些集合的實現類中并沒有get方法。而我們知道,所有繼承Collection接口的接口或者這些接口的實現類,都可以通過iterator()返回一個迭代器,那么我們就可以通過迭代器這種通用的方式去訪問集合中的所有元素了。訪問方法如下:
?1
ArrayList?al?
=
?
new
?ArrayList();?
?2
?3
????al.add(
new
?Point(
3
,
3
));?
?4
?5
????al.add(
new
?Point(
4
,
4
));?
?6
?7
????al.add(
new
?Point(
5
,
5
));?
?8
?9
Iterator?it1?
=
?al.iterator();?
10
11
???????
while
(it.hasNext())?????????????????????
//
?通過迭代器訪問集合元素?
12
???????
{?
13
??????????????System.out.println(it.next());?
14
???????}
?
15
ArrayList
底層采用數組完成,而LinkedList則是以一般的雙向鏈表(double-linked list)完成,其內每個對象除了數據本身外,還有兩個引用,分別指向前一個元素和后一個元素。
如果我們經常在List的開始處增加元素,或者在List中進行插入和刪除操作,我們應該使用LinkedList,否則的話,使用ArrayList將更加快速。
這兩個類都不是同步的,因此他們的效率也比較高。如果要實現同步,可以使用Vector類,Vector類中有一些繼承的操作,使用的時候要小心,如果不實現同步一般都不用Vector類。還可以用Collections類的
synchronized
相關方法實現同步,不過效率沒有
Vector
類高。