zoukankan      html  css  js  c++  java
  • 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 存储元素的数据结构是双向链表结构,由存储元素的结点连接而成,每一个节点都包含前一个节点的引用,后一个节点的引用和节点存储的值。当一个新节点插入时,只需要修改其中保持先后关系的节点的引用即可。

  • 相关阅读:
    计算机网络-数据结构-MAC帧头-IP头-TCP头-UDP头
    (考研)java网络编程
    多态(重点:方法的多态性和对象的多态性)
    JZOJ1497 景点中心 题解
    JZOJ1227 Coprime 题解
    JZOJ3966 Sabotage 题解
    JZOJ3056 数字 题解
    JZOJ3054 祖孙询问 题解
    【Luogu P2282】【JZOJ 4906】【NOIP2016提高组复赛】组合数问题 题解
    JZOJ4316【NOIP2015模拟11.5】Isfind 题解
  • 原文地址:https://www.cnblogs.com/zyc19910109/p/12558420.html
Copyright © 2011-2022 走看看