Java筆記 List集合常用子類

2021-07-31 21:34:31 字數 4259 閱讀 7484

在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...