• 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));
            }
        }
    }
  • 相关阅读:
    Centos 5.5 Lamp源码包安装编译 新风宇宙
    Linux系统日志管理 新风宇宙
    ubuntu设置时区,网上同步时间 新风宇宙
    ubuntu vim输入中文设置(SecureCRT下) 新风宇宙
    DIV+CSS容易犯的十个错误 新风宇宙
    apache性能优化 新风宇宙
    java里面main函数为什么要用static修饰
    如何设计mysql数据库和数据表
    PHP 图片验证码
    PHP免费空间选择方法概述
  • 原文地址:https://www.cnblogs.com/kenantongxue/p/16042346.html
Copyright © 2020-2023  润新知