Java學習筆記30(集合框架四:List接口)
List接口繼承自Collection接口
具有重要的三大特點:
1.有序集合:存入和取出的順序一致
2.此接口的用戶可以對列表中每個元素插入位置精確的控制:可以通過索引操作
3.可以存儲重復元素
List接口的特有方法(與索引有關):
package demo; import java.util.List; import java.util.ArrayList; //List接口繼承Collection接口,下有很多實現類 //例如ArrayList public class ListDemo { public static void main(String[] args) { function1();//添加 function2();//刪除 function3();//修改 } public static List<String> function(){ //創建集合 List<String> list = new ArrayList<>(); list.add("abc1"); list.add("abc2"); list.add("abc3"); list.add("abc4"); return list; }public static void function1(){ List<String> list = function(); System.out.println(list); //[abc1, abc2, abc3, abc4] list.add(1, "abc");//在1索引上添加 System.out.println(list); //[abc1, abc, abc2, abc3, abc4] } public static void function2(){ List<String> list = function(); System.out.println(list); //[abc1, abc2, abc3, abc4] String s = list.remove(1); System.out.println(s);//輸出:abc2 System.out.println(list); //[abc1, abc3, abc4] } public static void function3(){ List<String> list = function(); System.out.println(list); //[abc1, abc2, abc3, abc4] String s = list.set(2, "abc"); System.out.println(s);//輸出:abc3 System.out.println(list); //[abc1, abc2, abc, abc4] } }
List集合遍歷方式有三種:叠代器遍歷,普通for循環遍歷,增強for循環遍歷
List接口的數據存儲結構:
List的眾多子類存儲元素所采用的結構方式是不同的,因此導致了眾多集合有了各自的特點:
數據存儲的常用結構有:堆棧,隊列,數組,鏈表,這裏簡單介紹下:
堆棧存儲結構通俗解釋:子彈壓進彈夾,先壓進去的在下面,後壓進去的在上面,開槍的時候,上邊的子彈先彈出來,下邊的後出來(先進後出)
隊列存儲結構通俗解釋:坐火車排隊安檢,每個人依次檢查,只有前面的人查完,才能輪到後邊的人(先進先出)
數組結構:已經接觸過很多次,通過索引查找塊,不過由於定長,所以增刪慢
鏈表結構:每一個元素分為兩部分,一部分記錄上一個元素地址,另一部分存儲當前元素的信息,使得每一次個元素像自行車鏈一樣連接
查找時候由於需要通過連接的節點,速度慢,不過增刪的時候,原理是直接操作地址,不改變本身的結構,所以速度很快
ArrayList集合采用了數組結構存儲方式,所以查詢快,增刪慢,由於線程不安全,運行速度很快,
空參創建初始容量10,可變數組,原理是System的復制數組方法,以及一些其他的操作後進行擴容
LinkedList集合則采用了單向鏈表的數據結構,所以增刪快,查詢慢,同樣線程不同步,運行速度快
LinkedList提供了大量的首尾操作
示例:
package demo; import java.util.LinkedList; public class LinkedListDemo { public static void main(String[] args) { function1();// 添加 function2();// 獲取頭尾 function3();// 移除並返回開頭 } public static void function1() { LinkedList<String> link = new LinkedList<String>(); link.addLast("a"); link.addLast("b"); link.addLast("c"); link.addLast("d"); link.addFirst("1"); link.addFirst("2"); link.addFirst("3"); System.out.println(link); // [3, 2, 1, a, b, c, d] } public static void function2() { LinkedList<String> link = new LinkedList<String>(); link.add("1"); link.add("2"); link.add("3"); link.add("4"); if (!link.isEmpty()) { String first = link.getFirst(); String last = link.getLast(); System.out.println(first);// 1 System.out.println(last);// 4 } } public static void function3() { LinkedList<String> link = new LinkedList<String>(); link.add("1"); link.add("2"); link.add("3"); link.add("4"); String first = link.removeFirst(); String last = link.removeLast(); System.out.println(first);// 1 System.out.println(last);// 4 System.out.println(link);// [2, 3] } }
還有一個Vector集合,數組結構,是JDK最早的集合,方法和ArrayList基本相同,運行速度慢,所以後來被ArrayList代替,這裏不介紹了
Java學習筆記30(集合框架四:List接口)