關於List的學習

2021-07-16 22:18:02 字數 1956 閱讀 8287

list:元素放入是有序的,元素可以重複,元素允許為空。

collection

├list

│├linkedlist

│├arraylist

│└vector

│ └stack

└set

├hashset

└treeset

map├hashtable

├hashmap

└weakhashmap

arraylist:底層的資料結構基於動態陣列,建立後構造乙個初始容量為 10 的空列表,當放滿了10個元素後,以50%的長度加長集合容器的長度(特點是查詢、修改很快,但增加、刪除較慢)執行緒不同步。

linkedlist:底層的資料結構使用雙向鍊錶實現儲存(特點是查詢、修改較慢,增加、刪除較快)執行緒不同步。

vector:類似於arraylist,底層也是陣列資料結構 (陣列長度是可變的百分之百延長)(無論查詢、修改還是增加、刪除都比較慢),它是執行緒同步的。

stack:繼承自vector。目前了解較少,待日後補充。

stack 類表示後進先出(lifo)的物件堆疊。它通過五個操作對類 vector 進行了擴充套件 ,允許將向量視為堆疊。它提供了通常的 push 和 pop 操作,以及取堆疊頂點的 peek 方法、測試堆疊是否為空的 empty 方法、在堆疊中查詢項並確定到堆疊頂距離的 search 方法。--引用

arraylist、linkedlist是執行緒不同步的。若是多個執行緒同時操作乙個list,則必須本身實現接見同步。一種解決辦法是在建立list建立乙個同步list:

如:list list = collections.synchronizedlist(new linkedlist(...));

public class arraylisttest 

list.add(0, "ling");

list.add(0, "o");

system.out.println(list);

system.out.println(list.sublist(1, 3));//包含頭不包含尾

//遍歷方式2

//iterator方法只能操作元素,所以只能對元素進行判斷,取出,刪除的操作

iterator iterator =list.iterator();

while (iterator.hasnext())

system.out.println("iterator:"+object);

} //如果想要其他的操作如新增,修改等,就需要使用其子介面,listiterator

listiterator iterator2= list.listiterator();

while (iterator2.hasnext())

system.out.println("listiterator:"+object);

} system.out.println("list:"+list);

}}

在遍歷list、set、map時經常使用iterator進行遍歷,對於list有特有的迭代器listiterator。

iterator和listiterator主要區別在以下方面:

1. listiterator有add()方法,可以向list中新增物件,而iterator不能。

2. listiterator和iterator都有hasnext()和next()方法,可以實現順序向後遍歷,但是listiterator有hasprevious()和previous()方法,可以實現逆向(順序向前)遍歷。iterator就不可以。

3. listiterator可以定位當前的索引位置,nextindex()和previousindex()可以實現。iterator沒有此功能。

4. 都可實現刪除物件,但是listiterator可以實現物件的修改,set()方法可以實現。iterator僅能遍歷,不能修改。

記錄內容較為淺顯,待日後補充。

關於list集合

list雖然是啥都能放的集合,在不加泛型限制的情況下,是什麼都能放進去,放進去了,也能直接get拿出來。但是如果用了foreach迴圈,或者是迭代器,foreach迴圈和迭代器是有條件的迭代出集合裡面的值!就好比下面的例子 首先宣告alist是乙個list集合 public void foreach...

關於List容器的erase

之前在程式裡面使用了list容器,其中用到了erase 函式,之前一直沒出現問題,這兩天突然莫名奇妙。花了點時間,搞清楚了erase 函式的機理。常用的刪除容器中元素的方法是如下 方法1 list int list list int iterator iter for iter list.begin...

關於list的addAll方法

可以把乙個同型別的list新增到另外乙個list當中,並且可以進行一系列操作。ps 如果像下面這樣,單純的把乙個list在新增乙份的話,如果在對裡面的物件進行操作,就會出現問題,這是由於引用的位址空間一樣的原因 listtotallist new arraylist for int i 0 i 3 ...