Java LinkedList源码

Linkedlist的源码结构和其他没有太大区别,但细节上非常有学习的必要

一、大体结构

总体上还是围绕双向链表,以链表的操作:
1、CURD为底拓展了一系列方法,从首尾增删的remove-unlinkf/l、add-link,中间删除的remove-unlink,查询的一系列
2、边界检测用的方法:isPositionIndex等

二、方法细节笔记

方法之间低耦合,抽象出高内聚的方法,在服务性的方法中调用,边界检测放在外层方法中
public void add(int index, E element) {
        checkPositionIndex(index);

        if (index == size)
            linkLast(element);
        else
            linkBefore(element, node(index));
    }

实现高复用,add方法多使用私有方法,如何设计私有方法,抽象出最原本的方法

 Node<E> node(int index) {
        // assert isElementIndex(index);

        if (index < (size >> 1)) {
            Node<E> x = first;
            for (int i = 0; i < index; i++)
                x = x.next;
            return x;
        } else {
            Node<E> x = last;
            for (int i = size - 1; i > index; i--)
                x = x.prev;
            return x;
        }
    }

提高效率,当索引在前半部分时从first开始遍历,反之从last,大大提高效率


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值