1. 程式人生 > >對Java 中List的理解

對Java 中List的理解

現在在實際開發工作中經常用到各種集合類資料,有必要好好總結下

1.基本知識點

  (1)形式上為一個集合介面,因為List介面實現了Collection介面,所以List介面擁有Collection介面提供的所有常用方法 。

只要是集合類介面都會有個“迭代子”( Iterator ),利用這個迭代子,就可以對list記憶體的一組物件進行操作。 所有要想操作這個list記憶體的東西,就首先要得到此迭代子的例項:Iterator it=l.iterator(); 用add()方法即可新增新的成員物件,他可以新增的僅僅只能為物件,不能新增基本資料型別;容器還對應get(),remove()方法來獲取和刪除資料成員;

(2)最大特點: 有序、可重複

   (3)常用實現類有ArrayList和LinkedList

              ArrayList:底層資料結構的實現方式採用的是陣列結構,其特點是查詢快,增刪較慢,執行緒不同步;

              LinkedList:底層資料結構的實現是連結串列結構,其特點是查詢較慢,增刪較快
              Vector:底層是陣列資料結構 執行緒同步(無論查詢還是增刪都很慢,被ArrayList替代了)

注意:

   需要快速插入,刪除元素,應該使用LinkedList;
   需要快速隨機訪問元素,應該使用ArrayList;

   對於“單執行緒環境” 或者 “多執行緒環境,但List僅僅只會被單個執行緒操作”,此時應該使用非同步的類(如ArrayList);
   對於“多執行緒環境,且List可能同時被多個執行緒操作”,此時,應該使用同步的類(如Vector);

2. 常用方法和功能

(1)實現方式:

List<String> list1 = new ArrayList<String>();
List<String> list2 = new LinkedList<String>();
(2)常用方法:

add(int index, Object obj)方法和set(int index, Object obj)方法,前者是向指定索引位置新增物件,而後者是修改指定索引位置的物件

list1.add(0, "JAVA");
list1.add(1, "C++");
list1.add(2, "C");
list1.add(3, "Phython");
list1.set(3, "改過了");
(3)遍歷方式有三種:
a.用迭代器Iterator ,在大量資料情況,用迭代器遍歷是最快的(也可以用List集合特有的迭代器:ListIterator(是Iterator的子介面))
Iterator<String> it = list1.iterator();
		while (it.hasNext()) {
			System.out.println(it.next());
		}

注意:
在迭代時,是不可以通過集合物件的方法操作集合中的元素
因為會發生ConcurrentModificationException異常(併發異常)
所以,在迭代器時,只能用迭代器的方法操作元素
因為Iterator方法是有限的所以只能對元素進行判斷,取出,刪除的操作
如果想要其他的操作如新增,修改等,就需要使用其子介面,ListIterator
該介面只能通過List集合的listIterator方法獲取

ListIterator<String> it2 = list2.listIterator();
		while (it2.hasNext()) {
		if (it2.next().equals("C++")) {
it2.add("新加一個");
//it2.set("修改你");
			}
		}

b.

for (String data : list1) {
			System.out.println(data);
		}

c.

for (int i = 0; i < list1.size(); i++) {
			System.err.println(list1.get(i));
		}
(4)LinkedList特有方法:  

addFirst();在頭部新增元素 addLast();在尾部新增元素

getFirst(); getLast(); 獲取元素但不刪除元素。如果集合中沒有元素,會出現NoSuchElementException

removeFirst(); removeLast(); 獲取元素但是刪除元素。如果集合中沒有元素,會出現NoSuchElementException

在JDK1.6出現了替代方法

offerFirst(); offerLast();

peekFirst(); peekLast(); 獲取元素,但是元素不被刪除。如果集合中沒有元素,會返回null

pollFirst(); pollLast(); 獲取元素,但是元素被刪除。如果集合中沒有元素,會返回null