Java學習日誌(五): 集合的數據結構,List集合(List接口,LinkedList)

JavaEE學習日誌持續更新----> 必看!JavaEE學習路線(文章總彙)

集合的數據結構

特點:先進後出
在這裏插入圖片描述

隊列

特點:先進先出
在這裏插入圖片描述

數組

特點:查詢快,增刪慢
在這裏插入圖片描述

鏈表

特點:查詢慢,增刪快
在這裏插入圖片描述

紅黑樹

特點:查詢速度非常快
在這裏插入圖片描述

List集合

List接口

java.util.List接口 extends Collection接口

List接口的特點:

  1. 有序集合。 存儲元素和取出元素的順序時一致的,存儲:123,取出:123。
  2. 有索引,包含了一些帶索引的特有方法。
  3. 允許存儲重複元素

帶索引的方法:

  • void add​(int index, E element) 將指定元素插入此列表中的指定位置(可選操作)。
  • E get​(int index) 返回此列表中指定位置的元素。
  • E remove​(int index) 刪除此列表中指定位置的元素(可選操作)。
  • E set​(int index, E element) 用指定的元素替換此列表中指定位置的元素(可選操作)。
public class Demo01 {
    public static void main(String[] args) {
        //創建一個List集合對象
        List<String> list = new ArrayList<>();
        //往集合中添加元素
        list.add("a");
        list.add("b");
        list.add("c");
        list.add("d");
        list.add("a");
        System.out.println(list);//[a, b, c, d, a]

        //void add​(int index, E element) 將指定元素插入此列表中的指定位置(可選操作)。
        //在c和d之間添加w
        list.add(3,"w");
        System.out.println(list);//[a, b, c, w, d, a]
        //E get​(int index) 返回此列表中指定位置的元素。
        System.out.println(list.get(0));//a
        System.out.println(list.get(4));//d
        //E remove​(int index) 刪除此列表中指定位置的元素(可選操作)。
        //把d後邊的a刪除
        String s1 = list.remove(5);
        System.out.println("被移除的元素:"+s1);//被移除的元素:a
        System.out.println(list);//[a, b, c, w, d]
        //E set​(int index, E element) 用指定的元素替換此列表中指定位置的元素(可選操作)。
        //把w替換爲小貓
        String s2 = list.set(3, "小貓");
        System.out.println("被替換的元素:"+s2);//被替換的元素:w
        System.out.println(list);//[a, b, c, 小貓, d]
        }
 }

注意:使用帶索引的方法,一定不要超出索引的使用範圍,否則就會拋出索引越界異常。

  1. IndexOutOfBoundsException 索引越界異常,一般集合會拋出
  2. ArrayIndexOutOfBoundsException 數組索引越界異常
  3. StringIndexOutOfBoundsException 字符串索引越界異常

三種遍歷的方法:

  1. 普通for循環遍歷
for (int i = 0; i < list.size(); i++) {
    System.out.println(list.get(i));
}
  1. 迭代器遍歷
Iterator<String> it = list.iterator();
while (it.hasNext()){
    String s = it.next();
    System.out.println(s);
}
  1. 增強for循環遍歷
for (String s : list) {
    System.out.println(s);
}

ArrayList集合

List接口的可調整大小的陣列實現。
請注意,此實現不同步。(多線程)
特點

  1. 實現了List接口,數組大小可根據元素的增加或刪除調整大小。
  2. 底層實現爲數組,查詢快,增刪慢**
  3. 此實現不同步(多線程)

Vector集合

特點:

  1. 實現List接口,可增長的對象數組。
  2. 底層實現爲數組,查詢快,增刪慢**
  3. 同步的 (單線程)

從Java 2平臺v1.2開始,該類被改進以實現List接口,使其成爲Java
Collections Framework的成員。
與新的集合實現不同, Vector是同步的。
如果不需要線程安全實現,建議使用ArrayList代替Vector

LinkedList集合

java.util.LinkedList
特點:

  1. 實現了List接口
  2. 底層是一個雙向鏈表結構:查詢慢,增刪快
  3. LinkedList集合中包含了一些操作首尾元素的方法

操作首尾元素的方法

  1. 添加首尾元素
  • public void addFirst(E e) 將指定元素插入此列表的開頭。
  • public void addLast(E e) 將指定元素添加到此列表的結尾。等效於add()方法
  • public void push(E e) 將元素推入此列表所表示的堆棧。等效於addFirst()方法
private static void show01() {
    //創建LinkedList集合對象
    LinkedList<String> linked = new LinkedList<>();
    //往集合中添加元素
    linked.add("aaa");
    linked.add("bbb");
    linked.add("ccc");
    linked.add("ddd");
    linked.add("aaa");
    System.out.println(linked);//[aaa, bbb, ccc, ddd, aaa]

    //public void addFirst(E e) :將指定元素插入此列表的開頭。
    //public void push(E e) :將元素推入此列表所表示的堆棧。等效於addFirst()方法
    //linked.addFirst("www");
    linked.push("www");
    System.out.println(linked);//[www, aaa, bbb, ccc, ddd, aaa]
    //public void addLast(E e) :將指定元素添加到此列表的結尾。等效於add()方法
    linked.addLast("com");
    //linked.add("com");
    System.out.println(linked);//[www, aaa, bbb, ccc, ddd, aaa, com]
}
  1. 獲取首尾元素
  • public E getFirst() 返回此列表的第一個元素。
  • public E getLast() 返回此列表的後一個元素。
private static void show02() {
    //創建LinkedList集合對象
    LinkedList<String> linked = new LinkedList<>();
    //往集合中添加元素
    linked.add("aaa");
    linked.add("bbb");
    linked.add("ccc");
    linked.add("ddd");

    //linked.clear();//如果集合中沒有元素,NoSuchElementException
    //防止程序拋出異常
    if(!linked.isEmpty()) {
        String first = linked.getFirst();
        System.out.println(first);//aaa

        String last = linked.getLast();
        System.out.println(last);//ddd
    }
}
  1. 移除首尾元素
  • public E removeFirst() 移除並返回此列表的第一個元素。
  • public E removeLast() 移除並返回此列表的後一個元素。
  • public E pop() 從此列表所表示的堆棧處彈出一個元素。等效於removeFirst()方法
private static void show03() {
    //創建LinkedList集合對象
    LinkedList<String> linked = new LinkedList<>();
    //往集合中添加元素
    linked.add("aaa");
    linked.add("bbb");
    linked.add("ccc");
    linked.add("ddd");
    System.out.println(linked);//[aaa, bbb, ccc, ddd]

    //linked.clear();

    //String first = linked.removeFirst();
    String pop = linked.pop();
    System.out.println(pop);//aaa

    String last = linked.removeLast();
    System.out.println(last);//ddd

    System.out.println(linked);//[bbb, ccc]
}
發佈了25 篇原創文章 · 獲贊 33 · 訪問量 5969
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章