LinkedList的用法


簡介:

LinkedList是List接口的實現類【存儲結構是鏈表,特點:每個元素分配的空間不必連續、插入和刪除元素時速度非常快、但訪問元素的速度較慢】

ArrayList 也是List接口的實現類【存儲結構是線性表】


LinkedList 是一個雙向鏈表,當數據量很大或者操作很頻繁的情況下,添加和刪除元素時具有比ArrayList更好的性能。但在元素查詢和修改方便要弱於ArrayList。LinkedList類每個結點用內部類Node表示,LInkedList通過first和last引用分別只想鏈表的第一個和最后一個元素,當鏈表為空時,first和last都為NULL值。LinkedList數據結構如下圖所示:

 

//存儲對象的結構Node,LinkedList的內部類
private static class Node<E>{
    E    item;
    Node<E>    next;//指向下一個節點
    Node<E>    prev;//指向上一個節點

    Node(Node<E> prev,E element,Node<E> next){
            this.item = element;
            this.next = next;
            this.prev = prev;
    }
}

  

 Node節點一共有三個屬性:item代表節點值,prev代表節點的前一個節點,next代表節點的后一個節點。每個節點都有一個前驅和后繼結點,並且在LinkedList中也定義了兩個變量分別指向鏈表的第一個和最后一個節點。

transient Node<E> first;

transient Node<E> last;

1、添加元素到LinkedList

LinkedList提供了多個添加元素的方法;

  • Boolean add(E  e) :在鏈表尾部添加一個元素,如果成功,返回true,否則返回false。
  • void      addFirst(E   e):在鏈表頭部插入一個元素。
  • addLast(E e): 在鏈表尾部 插入一個元素。
  • void   add(int index,E element): 在指定位置插入一個元素。

 

添加元素到LinkedList示例代碼如下:

package addDemo;
import java.util.LinkedList;
public class LinkedListAddDemo{
    public static void main(String[] args){
        LinkedList<String> linkedList = new LinkedList<>();
        linkedList.add("first");
        linkedList.add("second");
        linkedList.add("third");
        System.out.println(linkedList);
        
        linkedList.addFirst("addFirst");
        System.out.println(linkedList);

        linkedList.addLast("addLast");
        System.out.println(linkedList);

        linkedList.add(2,"addByIndex");
        System.out.println(linkedList);
    }
}
View Code

 

輸出結果如下:

 

 

 

從LinkedList中刪除元素

LinkedList提供了多個刪除元素的方法:

 

  • boolean remove(Object o):從當前鏈表中移除指定的元素。
  • E remove(int Index):從當前鏈表中移除指定位置的元素
  • E removeFirst(): 從當前鏈表中移除第一個元素。
  • E removeLast():從當前鏈表中移除最后一個元素。
  • E remove() :從當前鏈表中移除第一個元素,同removeLast()相同。

從LinkedList刪除元素示例代碼如下:

import java.util.LinkedList;
public class test{
    public static void main(String[] args) {
        LinkedList<String> linkedList = new LinkedList<>();
        linkedList.add("first");
        linkedList.add("second");
        linkedList.add("escond");
        linkedList.add("third");
        linkedList.add("four");
        linkedList.add("five");
        System.out.println(linkedList);
        linkedList.remove();
        System.out.println("remove:"+linkedList);
        linkedList.remove("second");
        System.out.println("remove(Object):"+linkedList);
        linkedList.remove("six");
        System.out.println("remove(Object) not exist:"+linkedList);
        linkedList.remove(2);
        System.out.println("remove(index):"+linkedList);
        linkedList.removeFirst();
        System.out.println("removeFirst:"+linkedList);
        linkedList.removeLast();
        System.out.println("removeLast:"+linkedList);
        System.out.println("------------------------------------");
        linkedList.clear();
        linkedList.add("first");
        linkedList.add("second");
        linkedList.add("escond");
        linkedList.add("third");
        linkedList.add("four");
        linkedList.add("five");
        System.out.println(linkedList);
        
        linkedList.removeFirstOccurrence("first");
        System.out.println("removeFirstOccurrence"+linkedList);
        linkedList.removeLastOccurrence("first");
        System.out.println("removeLastOccurrence"+linkedList);
        
    }
}
View Code

 

輸出結果如下:

 

 

 

從LinkedList獲取元素示例代碼如下:

LinkedList提供了多個獲取元素的方法:

  • E get(int index):從當前鏈表中獲取指定位置的元素。
  • E getFirst():從當前鏈表中獲取第一個元素。
  • E getLast():從當前鏈表中獲取最后一個元素。
import java.util.LinkedList;
public class test{
    public static void main(String[] args) {
        LinkedList<String> linkedList = new LinkedList<>();
        linkedList.add("first");
        linkedList.add("second");
        linkedList.add("escond");
        linkedList.add("third");
        linkedList.add("four");
        linkedList.add("five");
        System.out.println(linkedList);
        

        linkedList.get(3);
        System.out.println("get(index)"+linkedList.get(3));
        linkedList.getLast();
        System.out.println("getLast"+linkedList.getLast();
        linkedList.getFirst();
        System.out.println("getFirst"+linkedList.getFirst();
    }
}
View Code

 

輸出結果如下圖所示:

 

LinkedList的長度

int size() 獲取LinkedList的長度

 

LInkedList的遍歷方法

LinkedList可以通過迭代器、foreach語句、for循環語句等方法遍歷集合的所有元素。

import java.util.Iterator;
import java.util.LinkedList;
public class test{
    public static void main(String[] args) {
        LinkedList<Integer> linkedList = new LinkedList<>();
       for(int i=0;i<10000;i++){
            linkedList.addLast(i);
       }
       //通過一般for循環來遍歷LinkedList
       long start = System.currentTimeMillis();
       int size = linkedList.size();
       for(int i=0;i<size;i++){
           linkedList.get(i);
       }
       long end = System.currentTimeMillis();
       long total = end-start;
       System.out.println("byCommonFor-------->"+total+" ms");
       //通過迭代器來遍歷LinkedList
       start = System.currentTimeMillis();
       for(Iterator iter = linkedList.iterator();iter.hasNext();)
            iter.next();
        end = System.currentTimeMillis();
        total = end - start;
        System.out.println("byIterator--------->"+total+" ms");

        //通過foreach來遍歷LinkedList
        start = System.currentTimeMillis();
        for (Integer integer : linkedList)
            ;
        end = System.currentTimeMillis();

        total = end-start;

        System.out.println("byForeach--------->"+total+" ms");
        

       
    }
}
View Code

 

 

輸出結果如下圖所示:

 

 

LInkedList 存儲元素的數據結構是雙向鏈表結構,由存儲元素的結點連接而成,每一個節點都包含前一個節點的引用,后一個節點的引用和節點存儲的值。當一個新節點插入時,只需要修改其中保持先后關系的節點的引用即可。

 


免責聲明!

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



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