Java集合---LinkedList底层原理

本文详细介绍了Java中LinkedList类的内部结构和核心方法,包括其作为双端链表的数据结构,以及如何通过linkFirst、linkLast、linkBefore等方法进行节点的插入操作。这些方法的实现涉及到对first和last指针的维护,以及如何高效地查找和修改链表中的节点。通过阅读源码,可以深入理解LinkedList的工作原理。
摘要由CSDN通过智能技术生成

java中的LinkedList类实现了List接口和Deque接口,是一种链表类型的数据结构,支持高效的插入和删除操作,同时也实现了Deque接口,使得LinkedList类也具有队列的特性。LinkedList类的底层实现的数据结构是一个双端的链表。

 

LinkedList类中有一个内部私有类Node,这个类就代表双端链表的节点Node。这个类有三个属性,分别是前驱节点,本节点的值,后继结点。

源码中的实现是这样的。

 

private static class Node<E> {

        E item;

       Node<E> next;

       Node<E> prev;

 

       Node(Node<E> prev, E element, Node<E> next) {

           this.item = element;

           this.next = next;

           this.prev = prev;

        }

    }

 

注意这个节点的初始化方法,给定三个参数,分别前驱节点,本节点的值,后继结点。这个方法将在LinkedList的实现中多次调用。

 

下图是LinkedList内部结构的可视化,能够帮我们更好的理解LinkedList内部的结构。

 

 

 

 

 

 

image.png

 

 

双端链表由node组成,每个节点有两个reference指向前驱节点和后继结点,第一个节点的前驱节点为null,最后一个节点的后继节点为null。

 

LinkedList类有很多方法供我们调用。我们不会一一介绍,本文会详细介绍其中几个最核心最基本的方法,LinkedList的创建添加和删除基本都和这几个操作有关。

 

 

·       linkFirst() method

·       首先我们介绍第一个方法,linkFirst(),顾名思义,这个方法是插入第一个节点,我们先直接上代码,看看它的具体实现

 

 

/**

     * Links e asfirst element.

     */

    private voidlinkFirst(E e) {

        finalNode<E> f = first;

        finalNode<E> newNode = new Node<>(null, e, f);

Java集合框架是Java中用于存储和操作数据的重要工具。它提供了一组接口和类,用于处理不同类型的数据结构,如列表、集合、映射等。下面是Java集合框架的底层原理: 1. 数据结构:Java集合框架中的数据结构可以分为两类:基于数组和基于链表。基于数组的数据结构如ArrayList,它使用动态数组来实现。基于链表的数据结构如LinkedList,它使用双向链表来实现。 2. 接口和实现类:Java集合框架提供了一组接口,如List、Set、Map等,定义了不同类型的集合操作。每个接口都有一些对应的实现类,如ArrayList、HashSet、HashMap等。 3. 迭代器:Java集合框架提供了迭代器接口(Iterator),用于遍历集合中的元素。迭代器隐藏了底层集合的具体实现细节,使得我们可以以统一的方式访问集合中的元素。 4. 泛型:Java集合框架使用泛型来支持不同类型的元素存储和操作。通过使用泛型,可以在编译时检查类型安全性,并提供更好的代码重用性和可读性。 5. 效率和性能:Java集合框架在设计上考虑了效率和性能。例如,ArrayList在随机访问元素时具有较好的性能,但在插入和删除元素时较差。LinkedList在插入和删除元素时具有较好的性能,但在随机访问元素时较差。 总的来说,Java集合框架的底层原理是通过不同的数据结构和接口实现类来提供高效的数据存储和操作功能,同时使用泛型来支持类型安全性。这些特性使得Java集合框架成为开发Java应用程序中不可或缺的工具之一。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值