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