1. 程式人生 > >Java學習筆記30(集合框架四:List接口)

Java學習筆記30(集合框架四:List接口)

package int 集合框架 初始 tro color arraylist 原理 void

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接口)