java筆記三:List接口


  List承諾可以將元素維護在特定的序列中。List接口在Collection的基礎上添加了大量的方法,使得可以在List的中間插入和刪除元素。List與 set 不同,列表通常允許重復的元素。並且存放的順序與插入的順序一致。

  List接口的常用方法有:

  add(E o)   :將指定對象加入到列表中。

  add(int index, E element)  :將對象加入到指定位置處。

  addAll(Collection<? extends E> c)  :追加指定 collection 中的所有元素到此列表的結尾,順序是指定 collection 的迭代器返回這些元素的順序(可選操作)。

  addAll(int index, Collection<? extends E> c) :將指定 collection 中的所有元素都插入到列表中的指定位置(可選操作)。

  remove(int index) :移除某個位置上的元素。

  remove(Object o) : 移除列表中出現的首個指定元素。

  set(int index, E element) :用指定元素替換列表中指定位置的元素。

  size() :返回列表大小。
  .......

  常用的有兩種List類型:ArrayList和LinkedList。

  一、ArrayList

  ArrayList擅長於隨即訪問元素,因為它像數組一樣提供了下標,可以根據下標直接訪問,所以可以將ArrayList看作可擴充自身尺寸的數組。但是在ArrayList的中間插入和移除元素時較慢。

 1 package com.list;
 2 
 3 import java.util.ArrayList;
 4 import java.util.Iterator;
 5 import java.util.List;
 6 
 7 public class ArrayListTest {
 8     public static void main(String[] args) {
 9         List<String> list = new ArrayList<String>();
10         //添加元素
11         list.add("aaa");
12         list.add("bbb");
13         list.add("aaa");
14         list.add("ddd");
15         list.add("ccc");
16         list.add(null);
17         //遍歷
18         for (String string : list) {
19             System.out.println(string);
20         }
21         System.out.println("---------------");
22         //修改
23         list.set(1, "bbb2");
24         //刪除
25         list.remove("ccc");
26         //迭代器遍歷
27         Iterator<String> iterator = list.iterator();
28         while(iterator.hasNext()){
29             System.out.println(iterator.next());
30         }
31         System.out.println("--------------");
32         list.clear(); //清空列表
33         System.out.println("清空后list的大小"+list.size());//打印大小
34         List<String> list2 = new ArrayList<String>();
35         list2.add("a");
36         list2.add("b");
37         //將list2添加到list中
38         list.addAll(list2);
39         //遍歷
40         for (String string : list) {
41             System.out.println(string);
42         }
43     }
44 }

輸出結果為:

 1 aaa
 2 bbb
 3 aaa
 4 ddd
 5 ccc
 6 null
 7 ---------------
 8 aaa
 9 bbb2
10 aaa
11 ddd
12 null
13 --------------
14 清空后list的大小0
15 a
16 b

由輸出結果的1-5行可以看出,list存放元素的順序與加入的順序一致。

  二、LinkedList

  LinkedList通過代價較低的在List中間進行插入和刪除操作,提供了優化的順序訪問。但是在隨即訪問方面相對比較慢。

  下面舉個例子來演示LinkedList和ArrayList隨即訪問的速度:

 1 package com.list;
 2 
 3 import java.util.ArrayList;
 4 import java.util.LinkedList;
 5 import java.util.List;
 6 import java.util.Random;
 7 
 8 public class LinkedListTest {
 9     public static void main(String[] args) {
10         List<Integer> arraylist = new ArrayList<Integer>();
11         for (int i = 0; i < 5000; i++) {
12             arraylist.add(i);
13         }
14         List<Integer> linkedlist = new LinkedList<Integer>();
15         for (int i = 0; i < 5000; i++) {
16             linkedlist.add(i);
17         }
18         Random rand = new Random(5000);
19         //隨機訪問arrayList
20         long start = System.currentTimeMillis();
21         for (long i = 0; i < 500000; i++) {
22             arraylist.get(rand.nextInt(5000));
23         }
24         long end = System.currentTimeMillis();
25         System.out.println("arrayList隨機訪問時間:"+(end - start));
26         //隨機訪問arrayList
27         start = System.currentTimeMillis();
28         for (long i = 0; i < 500000; i++) {
29             linkedlist.get(rand.nextInt(5000));
30         }
31         end = System.currentTimeMillis();
32         System.out.println("linkedlist隨機訪問時間:"+(end - start));
33     }
34 }

程序運行結果為:

1 arrayList隨機訪問時間:20
2 linkedlist隨機訪問時間:2282


很明顯ArrayList隨即訪問比LinkedList快的多,因為LinkedList是以鏈表的現實存儲的。

  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM