1. 程式人生 > >javaAPI_集合基礎_List

javaAPI_集合基礎_List


List集合

1.list集合以及其特點
list集合是有序的,且可重複的。有序是指:儲存的是什麼那麼遍歷出來的也就是什麼。

2.list集合特有的功能
(1).新增功能
void add(int index,object element):在指定位置新增元素

(2).獲取功能
Object get(int index):獲取指定位置的元素

(3).列表迭代器
ListIterator listIterator():list集合特有的迭代器

(4).刪除功能
object remove(int index):根據索引刪除元素,返回被刪除的元素

(5).修改功能
Object set(int index,object element):根據索引修改元素,返回被修改的元素

//程式碼測試省略

3.list元素新增並遍歷
public static void main(String[] args) {
List lt = new ArrayList();
lt.add("hello");
lt.add("world");
lt.add("java");
lt.add("test");

//使用list的get()方法和size()方法進行for迴圈遍歷
for(int i = 0 ;i<lt.size() ; i ++){
System.out.println(lt.get(i));
}
}


4.併發修改異常以及其解決方法
產生併發修改異常的程式碼:
public static void main(String[] args) {
List lt = new ArrayList();
lt.add("hello");
lt.add("world");
lt.add("java");
lt.add("test");

//使用list的get()方法和size()方法進行for迴圈遍歷
Iterator iterator = lt.iterator();
while(iterator.hasNext()){
String str = (String) iterator.next();
if("java".equals(str)){
lt.add("List");
}
}
}
//報錯:ConcurrentModificationException

產生原因:
在使用迭代器迭代元素的時候,在判斷字串成功以後,集合中添加了一個新的元素,而這一個時候迭代器還不知道,就報錯。
其實質就是:迭代器迭代元素的時候不允許修改元素。

如何解決:
A:使用迭代器迭代元素,使用迭代器修改元素。
B:集合遍歷元素,集合修改元素(如for()迴圈)

解決程式碼1:
ListIterator iterator = lt.listIterator();
while(iterator.hasNext()){
String str = (String) iterator.next();
if("java".equals(str)){
iterator.add("List");
}
}
//結果:list:[hello, world, java, List, test]

解決程式碼2:
for(int x = 0;x < lt.size(); x++){
String s = (String) lt.get(x);
if("java".equals(s)){
lt.add("List");
}
}
//結果:list:[hello, world, java, test, List]


5.List集合的三個子類特點
ArrayList:
底層資料結構是陣列,查詢快,增刪慢。
執行緒不安全,效率高。
Vector:
底層資料結構是陣列,查詢快,增刪慢。
執行緒安全,效率低。
LinkedList:
底層資料結構是連結串列,查詢慢,增刪快。
執行緒不安全,效率高。

List有三個兒子,我們到底使用誰呢?
看需求(情況)。

要安全嗎?
要:Vector(即使要安全,也不用這個了,後面有替代的)
不要:ArrayList或者LinkedList
查詢多:ArrayList
增刪多:LinkedList

如果你什麼都不懂,就用ArrayList。