Java LinkedList用法


本想找隊列Queue,發現那是一個接口,LinkedList實現了Queue接口,可以當作隊列來用。

一、概述
  1. Java的LinkedList是一種常用的數據容器,與ArrayList相比,LinkedList的增刪操作效率更高,而查改操作效率較低。
  2. LinkedList 實現了Queue接口,能當作隊列使用。
  3. LinkedList 實現了List 接口,能對它進行列表操作。
  4. LinkedList 實現了Deque 接口,即能將LinkedList當作雙端隊列使用。
  5. LinkedList 實現了Cloneable接口,能克隆。
  6. LinkedList 實現了java.io.Serializable接口,這意味着LinkedList支持序列化,能通過序列化去傳輸。
二、構造方法
  1. LinkedList<類> list = new LinkedList<類>();
  2. LinkedList<類> list = new LinkedList(Collection<? extends E> c); 使用一個集合創建一個新的linkedList。
三、常用方法
1.增
  • public boolean add(E e),鏈表末尾添加元素,返回是否成功;
  • public void add(int index, E element),向指定位置插入元素;
  • public boolean addAll(Collection<? extends E> c),將一個集合的所有元素添加到鏈表后面,返回是否成功;
  • public boolean addAll(int index, Collection<? extends E> c),將一個集合的所有元素添加到鏈表的指定位置后面,返回是否成功;
  • public void addFirst(E e),添加到第一個元素;
  • public void addLast(E e),添加到最后一個元素;
  • public boolean offer(E e),向鏈表末尾添加元素,返回是否成功;
  • public boolean offerFirst(E e),頭部插入元素,返回是否成功;
  • public boolean offerLast(E e),尾部插入元素,返回是否成功;
2.刪
  • public void clear(),清空鏈表;
  • public E removeFirst(),刪除並返回第一個元素;
  • public E removeLast(),刪除並返回最后一個元素;
  • public boolean remove(Object o),刪除某一元素,返回是否成功;
  • public E remove(int index),刪除指定位置的元素;
  • public E poll(),刪除並返回第一個元素;
  • public E remove(),刪除並返回第一個元素;
3.查
  • public boolean contains(Object o),判斷是否含有某一元素;
  • public E get(int index),返回指定位置的元素;
  • public E getFirst(), 返回第一個元素;
  • public E getLast(),返回最后一個元素;
  • public int indexOf(Object o),查找指定元素從前往后第一次出現的索引;
  • public int lastIndexOf(Object o),查找指定元素最后一次出現的索引;
  • public E peek(),返回第一個元素;
  • public E element(),返回第一個元素;
  • public E peekFirst(),返回頭部元素;
  • public E peekLast(),返回尾部元素;
4.改
  • public E set(int index, E element),設置指定位置的元素;
5.遍歷
        for (int size = linkedList.size(), i = 0; i < size; i++) {
            System.out.println(linkedList.get(i));
        }
        for (String str: linkedList) {
            System.out.println(str);
        }
        Iterator iter = linkedList.iterator();
        while (iter.hasNext()) {
            System.out.println(iter.next());
        }
6.其他
  • public Object clone(),克隆該列表;
  • public Iterator<E> descendingIterator(),返回倒序迭代器;
  • public int size(),返回鏈表元素個數;
  • public ListIterator<E> listIterator(int index),返回從指定位置開始到末尾的迭代器;
  • public Object[] toArray(),返回一個由鏈表元素組成的數組;
  • public <T> T[] toArray(T[] a),返回一個由鏈表元素轉換類型而成的數組;
 
參考:https://www.jianshu.com/p/e1132ab06b0e

 
補:
底層數據結構是雙向鏈表,與ArrayList相比,LinkedList的增刪操作效率更高,而查改操作效率較低。何也?
  • 查改指定元素,需要指針不斷移動,直到找到那個元素,而數組是通過下標直接定位,所以LinkedList查找比較慢。
  • 增刪則是把單個節點拔掉,再用指針前后連接起來,而ArrayList需要將后面的全部復制到前面來覆蓋。
從數據結構上看是這樣平均的效率,但不是絕對的,如果每次在末尾增加元素,肯定是ArrayList快,如果是在頭部那就是LinkedList快。
獲取指定下標的元素,先判斷頭尾指針誰離得近,用近的指針去移動。
 


免責聲明!

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



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