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)); } } }