Java基础-LinkedList源码分析

package com.hspedu.linkedlist_;

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

@SuppressWarnings({"all"})
public class Course515 {
    public static void main(String[] args) {
        // LinkedList源码


        /*
         *  1、new LinkedList();创建size=0,first=null,last=null的集合
         *  2、add方法会调用linkLast();
         *      final Node<E> l = last;获取之前的last节点对象,
         *      如果l是null(集合为空)则让first和last都指向新增节点对象
         *  3、新的节点加入LinkedList双向链表集合的末端
         *  4、remove方法默认删除第一个节点
         *      unlinkFirst(Node);  first=first.next;指向下一个节点
         *      第一个元素的next和prev都置null,第一个元素被垃圾回收(GC)
         *
         *  ArrayList:增删慢,改查快(实际查找多,一般选择ArrayList)
         *  LinkedList:增删快,改查慢
         * */
        
        /*
            // 新增集合元素的核心源码
            void linkLast(E e) {
                final Node<E> l = last;  // 将原始集合的尾节点last赋给l
                final Node<E> newNode = new Node<>(l, e, null);  // 新增节点Node对象,传入原始集合的last节点l、新增元素对象e
                last = newNode;  // last节点指向新增节点
                if (l == null)  // 如果原来LinkedList集合的尾节点为null,即集合为空
                    first = newNode;  // first指向新增节点
                else                // 如果原来LinkedList集合的尾节点不为null,即集合存在其他节点
                    l.next = newNode;  // 原来集合的尾节点l的下一个节点next指向新增节点
                size++;
                modCount++;
            }
            
            
            Node(Node<E> prev, E element, Node<E> next) {
                this.item = element;    // 存放元素
                this.next = next;       // 新增节点的next指向null
                this.prev = prev;       // 新增节点的prev指向传入的原始集合的尾节点l
            }
        */
        LinkedList linkedList = new LinkedList();
        linkedList.add(1);
        linkedList.add(2);
        linkedList.add(3);
        System.out.println("linkedList = " + linkedList);
        

        linkedList.remove();
        System.out.println("LinkedList = " + linkedList);

        linkedList.set(1, 999);
        System.out.println("LinkedList = " + linkedList);

        Object getElement = linkedList.get(1);
        System.out.println("LinkedList = " + linkedList);

        for (Object item : linkedList) {
            System.out.println("item = " + item);
        }
        Iterator iterator = linkedList.iterator();
        while (iterator.hasNext()) {
            System.out.println("next = " + iterator.next());
        }
        for (int i = 0; i < linkedList.size(); i++) {
            System.out.println("get = " + linkedList.get(i));
        }
    }
}

 

posted @ 2022-03-23 01:43  柯南同学  阅读(31)  评论(0编辑  收藏  举报