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