Java 集合 ArrayList、LinkedList(一)

/**
* @author StormWangxhu
* @version 創建時間:2017年11月3日 上午10:03:44
*
*/

今天來總結一下集合,這篇主要總結一下List藉口及其相關的實現類。
首先看一下集合的框架。
這裏寫圖片描述

再一張

這裏寫圖片描述

最後一張性能總結性圖:

這裏寫圖片描述

從上圖中可以看到,List接口主要有兩個實現類,ArrayList和LinkedList,主要講一下第一個。

1、ArrayList

(1) 關於ArrayList的實現原理,以後通過看源代碼來總結。

(2)、


ArrayList的一些方法,實現增刪改查:

結合代碼看:

package com.stormwang.List;

import java.util.ArrayList;
import java.util.Iterator;

import javax.rmi.ssl.SslRMIClientSocketFactory;
import javax.swing.plaf.synth.SynthSpinnerUI;

/**
* @author StormWangxhu
* @version 創建時間:2017年11月3日 上午10:03:44
*
*/
/**
 * List   是一個藉口
 * ArrayList是其一個實現類!
 * 特點:    查詢元素快,增刪效率低下!
 * 那麼,這種缺陷,由LinkedList集合來克服:後面再練習!
 * LinkedList特點:
 *    刪除效率高!
 * ArrayList  練習
 * 實現集合元素的增刪改查!
 * */
public class ListDemo {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        ArrayList arrayList = new ArrayList<>();
        //實現集合的增刪改查
        arrayList.add("hello!");
        arrayList.add("I am java!");
        arrayList.add("今天是11月3號!,我在圖書館學習!");
        arrayList.add("我也會很牛逼的對嗎!");
        arrayList.add(3, "我是指定位置插入的元素");
        System.out.println(arrayList.size());
        System.out.println("以下是直接輸出集合元素:");
        System.out.println(arrayList);
        //遍歷集合
        System.out.println("使用迭代器遍歷集合:");
        Iterator iterator = arrayList.iterator();
        while (iterator.hasNext()) {
            Object object = (Object) iterator.next();
            System.out.println(object);
        }
        //刪
        System.out.println("刪操作:");
        if (arrayList.get(2).equals("今天是11月3號!,我在圖書館學習!")) {
            arrayList.remove(2);
            System.out.println("第三個元素刪除成功");
        }else {
            System.out.println("刪除失敗!");
        }
        //使用foreach 循環輸出集合元素
        System.out.println("使用foreach循環輸出集合元素:");
        for (Object object : arrayList) {
            System.out.println(object);
        }
        //改
        System.out.println("改操作:");
        System.out.println("現在集合大小爲:"+arrayList.size());
        arrayList.set(1, "我是新的第二個元素,原來已被我替換!!");
        //ArrayList    有序,可重複
        arrayList.set(0, arrayList.get(1));
        System.out.println("...");
        /**
         * 
         * 問題:這一部分爲什麼會執行不了?    拋出異常!
        Iterator iterator2 = arrayList.iterator();
        while (iterator.hasNext()) {
            Object object = (Object) iterator.next();
            System.out.println(object);

        }*/
        System.out.println("現在集合元素爲:");
        for (Object object : arrayList) {
            System.out.println(object);
        }
        //查操作
        //如果沒有元素返回真
        if (!arrayList.isEmpty()) {
            System.out.println(arrayList.isEmpty());
        }
        if (arrayList.contains(2)) {
            System.out.println("什麼鬼!");
        }else {
            System.out.println("包含操作查詢失敗!");
        }
        Object object ;
        System.out.println("查操作:");
        object =arrayList.get(0);
        System.out.println("第一個元素爲:"+object);
        //使用toString()方法,將集合元素轉換爲字符串。
        System.out.println(arrayList.toString());
        System.out.println(arrayList);



    }

}

ArrayList 特點:

1、實現:
集合底層是使用了一個數組來保存元素的,在增加、刪除指定位置元素時,會導致創建新的數組,效率比較低,因此不適用於做大量的增刪操作。但這種數據結構,允許程序通過索引的方式來訪問元素。因此使用ArrayList集合查找元素很便捷。

2、提供的查找方法:

這裏寫圖片描述

LinkedList

1、特點:
LinkedList
* 該集合內部維護了一個雙向循環鏈表,鏈表中的每一個元素
* 都使用引用的方式記住它的前一個元素和後一個元素,從而
* 可以將所有的元素彼此連接起來。


  • 當插入一個新元素時,只需要修改元素之間的這種引用關係即可。

  • 當刪除一個節點也是如次。正因爲LinkedList的存儲結構,Linkedlist集合對元素的增刪操作具有很高的效率。

下面通過一組圖片看LinkedList的結構:

這裏寫圖片描述

上圖爲新增一個元素時:只需要讓黃色部分的節點記住它後面是新元素,讓黃顏色後面的記住它前面的是新元素。
通過代碼演示一下該類的特長————增、刪操作

package com.stormwang.List;

import java.util.Iterator;
import java.util.LinkedList;

/**
* @author StormWangxhu
* @version 創建時間:2017年11月3日 下午6:55:57
*
*/
/**
 * LinkedList   
 *  該集合內部維護了一個雙向循環鏈表,鏈表中的每一個元素
 *  都使用引用的方式記住它的前一個元素和後一個元素,從而
 *  可以將所有的元素彼此連接起來。
 * */
public class LinkedListTest {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        LinkedList linkedList = new LinkedList<>();
        //增操作
        System.out.println("增加元素:");
        linkedList.add("stu1");
        linkedList.add("stu2");
        linkedList.add("stu3");
        linkedList.add("stu4");
        System.out.println(linkedList.toString());
        //向指定位置插入元素
        linkedList.add(2, "指定位置");
        Iterator iterator = linkedList.iterator();
        while (iterator.hasNext()) {
            Object object = (Object) iterator.next();
            System.out.println(object);

        }
        //在最前面插入元素
        linkedList.addFirst("First");
        //刪除最後一個元素
        linkedList.removeLast();
        //返回此列表的第一個元素。
        System.out.println(linkedList.getFirst());
        System.out.println(linkedList);
        //刪除指定元素
        linkedList.remove(3);
        System.out.println(linkedList);
        //刪除最後一個元素
        linkedList.removeLast();
        System.out.println(linkedList);
        //刪除第一個元素
        linkedList.removeFirst();
        System.out.println(linkedList);
    }

}

LinkedList在增刪方面有7個特有的方法。

看看:

這裏寫圖片描述


這裏寫圖片描述

具體可以查看API


下面看看ArrayList和LinkedList的區別:

這裏寫圖片描述


總結:
ArrayList:   
                  有序      可重複 
                  查找效率高,大批量增加、刪除操作慢。
                  線程不安全



LinkedList        



                有序        可重複
                增刪效率高! 查找效率不好。
                線程安全
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章