在list集合中,有三個重要的常用子類:vector,arraylist,linkedlist。
1. vector:內部是陣列資料結構,執行緒安全。增刪,查詢都很慢。
2. arraylist:內部是陣列資料結構,執行緒不安全,替代vector,查詢速度快,增刪速度慢。如果需要使用多執行緒,我們可以給arraylist加鎖,或者使用其他的方法,vector已經不再使用了。
3. linkedlist:內部是鍊錶資料結構,執行緒不安全,增刪速度快,查詢速度慢。
* 如果要猜集合是否執行緒安全,只要不是vector,都猜執行緒不安全,概率大
vector
vector在jdk1.0版本就已經出現了,在1.2版本後出現了collection集合,開始有集合框架,vector改進為可以實現list介面,納入集合框架。建構函式vector()構造乙個空向量,內部陣列預設初始化大小為10。vector中的方法都是從collection和list繼承來的。但vector有一些特有的方法
void addelement(e obj)
e firstelement()
e lastelement()
boolean removeelement(object obj)
void setelementat(e obj, int index)等…這些方法和對應不帶element的方法功能相同。
vector特有的取出方法:enumeration elements():返回此向量的元件的列舉
enumeration是乙個介面,與iterator類似。它有兩個方法:
boolean hasmoreelements():是否還包含元素
e nextelement():返回此列舉的下乙個元素
介面enumeration的功能與iterator介面功能是重複的。此外,iterator 介面新增了乙個可選的移除操作(void remove()),並使用較短的方法名。新的實現應該優先考慮使用 iterator 介面而不是 enumeration 介面。
vector v = new vector();
v.addelement("abc1");
v.addelement("abc2");
v.addelement("abc3");
v.addelement("abc4");
enumeration en = v.elements();
while(en.hasmoreelements())
輸出結果:
abc1
abc2
abc3
abc4
linkedlist
linkedlist是鏈結列表資料儲存格式的,簡稱鏈**式。鍊錶記憶體示意圖如下:
鍊錶中每個元素都有自己的位址,第乙個元素記住第二個元素的位址,第二個元素記住第三個元素的位址,以此類推…如果想要查詢其中的某乙個元素,要從第乙個元素挨個做判斷,因為這些元素不是連續的,所以很慢。如果要增加乙個元素,讓這個元素把位址給前乙個元素,再記住後乙個元素的位置即可;如果要刪除乙個元素,只要它前乙個元素記住它後乙個元素的位址即可,所以增刪的速度很快。
linkedlist也有角標,因為它是list集合的子類,list介面最大的特點就是可以操作角標。
一般方法:
void addfirst(e e):將指定元素插入此列表的開頭
void addlast(e e):將指定元素新增到此列表的結尾
object getfirst():返回此列表的第乙個元素
object getlast():返回此列表的最後乙個元素
object removefirst():移除並返回此列表的第乙個元素,remove會改變集合的長度,所以第二個元素就變成了第乙個元素
linkedlist link = new linkedlist();
link.addfirst("abc1");
link.addfirst("abc2");
link.addfirst("abc3");
link.addfirst("abc4");
iterator it = link.iterator();
while(it.hasnext())
system.out.println("-----------------------");
system.out.println(link.getfirst());
system.out.println(link.getfirst());//getfirst獲取第乙個元素但是不會刪除
system.out.println("-----------------------");
system.out.println(link.removefirst());
system.out.println(link.removefirst());//remove改變集合長度,第二個元素變成第乙個
system.out.println("-----------------------");
link.addfirst("abc3");
link.addfirst("abc4");
while (!link.isempty())
輸出結果:
abc4
abc3
abc2
abc1
abc4
abc4
abc4
abc3
abc4
abc3
abc2
abc1
在jdk1.6版本後新增了一些方法
addfirst();
addlast():
jdk1.6
offerfirst();
offetlast();
getfirst();.//獲取但不移除,如果鍊錶為空,丟擲nosuchelementexception.
getlast();
jdk1.6
peekfirst();//獲取但不移除,如果鍊錶為空,返回null.
peeklast():
removefirst();//獲取並移除,如果鍊錶為空,丟擲nosuchelementexception.
removelast();
jdk1.6
pollfirst();//獲取並移除,如果鍊錶為空,返回null.
polllast();
arraylist
arraylist是大小可變的陣列,arraylist()建構函式預設初始化乙個容量為10的空列表
arraylist記憶體示意圖如下:
arraylist中每乙個元素都有自己的位址值,陣列中儲存著這些元素的位址值,因為陣列是一片連續的空間,所以在查詢某一元素的時候速度很快。但是如果刪除1角標的元素,因為remove會改變集合的長度,刪除後如下
角標1後所以的元素位置都需要做改變,所以arraylist增刪元素的速度相對較慢。
arraylist al = new arraylist();
al.add(new person("lisi1",21));
al.add(new person("lisi2",22));
al.add(new person("lisi3",23));
al.add(new person("lisi4",24));
al.add(5);版本以後自動裝箱
al.add(new integer(10));版本前
iterator it = al.iterator();
while(it.hasnext())
輸出結果:
lisi1:21
lisi2:22
lisi3:23
lisi4:24
5 10
JAVA 集合的子介面List
list 列表 此介面對應的實現類的特點都是 有序的,可以重複的 重複與否與元素的equals方法有關 常用方法 void add int index,e element 將某一元素,插入到此集合的某一下標index處 e get int index 返回指定下標上的元素 int indexof o...
Java 回顧筆記 集合框架 list集合
集合框架 list和set的特點 集合框架 list集合的常見方法 因為list是conllection的子介面 所以具備父類的功能。我們下面只說出他特有的功能即可 集合框架 listiterator介面 只有list有 get 方法 而iterator 是通用的取出方式.使用迭代器 的途中使用集合...
Java 集合框架 List 集合
arraylist,linkedlist,vector,stack是list的4個實現類。arraylist 是乙個陣列佇列,相當於動態陣列。它由陣列實現,隨機訪問效率高,隨機插入 隨機刪除效率低。linkedlist 是乙個雙向鍊錶。它也可以被當作堆疊 佇列或雙端佇列進行操作。linkedlist...