共同学习Java源代码--数据结构--LinkedList类(八)

JavaLinkedList的特性与用法详解 Java中,数据结构是非常重要的一部分。其中LinkedList是一种常用的数据结构,用于存储和操作一系列的元素。该实现了List接口,能够在列表中插入和删除元素,以及对元素进行访问和搜索。本文将介绍JavaLinkedList的具体实现和应用场景。首先,我们将探讨LinkedList的基本概念和构造函数,然后介绍其源代码解析、应用场景案例以及优缺点分析。之后,我们将详细介绍LinkedList的每个方法及其实现原理,并给出相应的测试用例。最后,我们将对本文的主要内容进行一个全文小结和总结。 阅读详情
    public Iterator<E> descendingIterator() {
        return new DescendingIterator();
    }
这个方法返回一个倒叙Iterator,倒叙Iterator在下面:

 
    private class DescendingIterator implements Iterator<E> {
        private final ListItr itr = new ListItr(size());

        生成一个ListItr,传入size方法返回值作为长度。

        public boolean hasNext() {

            return itr.hasPrevious();

        }

        hasNext就是调用hasPrevious,判断有没有上一个

        public E next() {
            return itr.previous();
        }
        public void remove() {
            itr.remove();
        }
    }
其他方法不列举了 就是倒叙遍历。

    @SuppressWarnings("unchecked")
    private LinkedList<E> superClone() {
        try {
            return (LinkedList<E>) super.clone();
        } catch (CloneNotSupportedException e) {
            throw new InternalError(e);
        }

    }

这个方法是调用父类的克隆方法克隆一个链表。


public Object clone() {
        LinkedList<E> clone = superClone();
        clone.first = clone.last = null;
        clone.size = 0;
        clone.modCount = 0;
        for (Node<E> x = first; x != null; x = x.next)
            clone.add(x.item);
        return clone;
    }

这个方法是浅克隆一个链表。

首先调用上一个superClone方法返回一个链表克隆体。首先将链表的大部分属性置空或归零。然后克隆体一个一个添加元素。最后返回克隆体。


    public Object[] toArray() {
        Object[] result = new Object[size];
        int i = 0;
        for (Node<E> x = first; x != null; x = x.next)
            result[i++] = x.item;
        return result;
    }

这个方法是将链表转换成数组的方法。

首先构建一个Object数组,长度为链表长度。

然后遍历链表将元素添加进去。最后返回Object数组。


    public <T> T[] toArray(T[] a) {
        if (a.length < size)
            a = (T[])java.lang.reflect.Array.newInstance(
                                a.getClass().getComponentType(), size);
        int i = 0;
        Object[] result = a;
        for (Node<E> x = first; x != null; x = x.next)
            result[i++] = x.item;
        if (a.length > size)
            a[size] = null;
        return a;
    }

这个方法是将链表转换成数组的方法,但传入一个泛型数组参数。

先判断参数长度如果小于链表长度,参数重新指向一个新的数组,类型为泛型,长度为链表长度,这里使用了反射机制。

然后和上面的方法大同小异。最后判断一下参数指向的数组的长度大于链表长度,就将参数指向的数组的链表长度位置空。

最后返回参数指向的数组。


   private void writeObject(java.io.ObjectOutputStream s)
        throws java.io.IOException {
        // Write out any hidden serialization magic
        s.defaultWriteObject();
        // Write out size
        s.writeInt(size);
        // Write out all elements in the proper order.
        for (Node<E> x = first; x != null; x = x.next)
            s.writeObject(x.item);
    }

这个方式是在序列化时对外输出数据的方法。

需要传入一个Object输出流。首先调用输出流的默认输出对象方法,将类型信息输出。

然后输出链表长度,最后依次输出链表所有元素。


    private void readObject(java.io.ObjectInputStream s)
        throws java.io.IOException, ClassNotFoundException {
        // Read in any hidden serialization magic
        s.defaultReadObject();
        // Read in size
        int size = s.readInt();
        // Read in all elements in the proper order.
        for (int i = 0; i < size; i++)
            linkLast((E)s.readObject());
    }

这个方法是在序列化时对内输入数据的方法,和输出方法大同小异,不多说了。


LinkedList的绝大部分内容都写完了,剩下的是1.8新特性,这个暂时先不考虑。

JavaLinkedList的详解:从头到尾了解 Java开发中,数据结构是必不可少的一部分。数据结构的选择和使用对程序的性能和可维护性有很大的影响。LinkedListJava中的一种重要的数据结构,它不仅可以存储数据,还可以支持插入、删除等操作。本文主要介绍LinkedList的概念、原理、源代码解析、应用场景案例、优缺点分析以及代码方法介绍,同时给出相应的测试用例。LinkedListJava中的一个,它实现了List接口和Deque接口。LinkedList底层是基于链表实现的,因此它可以支持高效的插入和删除操作。 阅读详情

相关推荐

极智嘉嵌入式面试题及参考答案

IIC(Inter-Integrated Circuit)即集成电路总线,是一种由 PHILIPS 公司开发的两线式串行总线,用于连接微控制器及其外围设备。它仅使用两根线,即串行数据线 SDA 和串行时钟线 SCL,就能实现多个设备之间的通信,具有简单、高效、占用资源少等优点,广泛应用于各种嵌入式系统中。

大模型大数据攻城狮的专栏 879

java数据结构和算法——单链表(Linked List)单链表反转(反转后链表的结构是原始链表顺序的倒序)的应用示例

实现单链表反转的目录一、单链表反转的思路分析示意图二、单链表反转的实现步骤的分解图三、单链表反转的代码示例 一、单链表反转的思路分析示意图 二、单链表反转的实现步骤的分解图 三、单链表反转的代码示例 1、定义一个人员节点,每一个PersonNode对象就是一个节点 package com.rf.springboot01.dataStructure.singleLinkedList; /** * @description: 定义一个人员节点,每一个PersonNode对象就是一个节点 * @au

小志的博客 732

LeRobot X-VLA:首个适用于任意机器人、任意任务的软提示机器人基础模型

X-VLA是一种基于软提示的视觉-语言-动作模型,通过可学习嵌入向量编码不同机器人配置,实现跨平台统一控制。该框架采用两阶段训练:先在29万次多平台任务中学习通用策略,再通过微调少量参数(仅1%)适配新机器人。实验表明,0.9B参数的X-VLA在6个仿真和3个真实平台上表现优异,如LIBERO任务达93%成功率,布料折叠任务100%完成。其核心创新是将硬件差异视为"任务",用软提示引导Transformer处理异构数据,为机器人基础模型提供可扩展方案。

2506_90492529的博客 1192

LinkedList进行排序

package 对Linked排序; public class Edge { public int w; public Edge() { // TODO 自动生成的构造函数存根 } public Edge(int w){ this.w=w; } public int getW() { return w; } public void setW(

u014230945的博客 1万+

倒序输出链表(递归思想)

给出一个自定义的链表: public class ListNode { int val; ListNode next; ListNode(int x) { val = x; } } 要求将给的链表翻转放入int数组。 方法一: 遍历取出数放入一个list,再依据list大小生成数组,再翻转置进去数值。 public int[] reversePrint1(ListNode head) { List<Integer> num

MagicSound的博客 1480

链表常见操作java实现二:反转链表,从尾到头倒序遍历

1.反转链表反转链表在面试中非常常见。例如: 将原链表: 0->1->2->3 反转为新链表: 3->2->1->0 反转链表的一般思路是使用三个指针。其中,一个指针为当前节点,一个指针指向当前节点的下一个节点,另外一个节点则指向新链表表头从而保存结果。public class Reversed_MyLinkedList { public static Node reversed_l

bitcarmanlee的博客 1万+

java对list集合进行倒序排序

LinkedList<Integer> list= new LinkedList<>(); list.add(1); list.add(2); list.add(3); System.out.println(list.toString()); //这里举例已字符串输出list //输出结果:[1,2,3] //对二进制集合进行倒序 Collections.reverse(list); System.out.println(list.toString()); //输出结果:[3,2,

qq_46239275的博客 2万+

共同学习Java源代码--数据结构--LinkedList()

public ListIterator listIterator(int index) {         checkPositionIndex(index);         return new ListItr(index);     } 这个方法首先检查参数是否越界,然后返回一个内部ListItr实例。 下面看内部Listltr:     private class Lis

ccdust的博客 440

共同学习Java源代码--数据结构--LinkedList()

public class LinkedList     extends AbstractSequentialList     implements List, Deque, Cloneable, java.io.Serializable 这是头,LinkedList继承自AbstractSequentialList,实现了List接口,Deque接口,Cloneable接口和Seriali

ccdust的博客 443

Java中的LinkedList:为什么它是数据结构中的万能选择?

Java中,有很多数据结构可供选择,如ArrayList、LinkedList、Stack、Queue等等。其中,LinkedList是被广泛使用的一种数据结构。在本篇文章中,我们将探讨LinkedListJava中的广泛应用,并解释为什么它是数据结构中的万能选择。LinkedList是一种非常常见的数据结构,它在Java编程中有着广泛的应用。它由一系列的节点组成,每个节点包含一个指向前一个节点的引用和一个指向后一个节点的引用。LinkedList具有许多优点,如高效的插入和删除操作、动态内存分配等等。

weixin_74412978的博客 1798

共同学习Java源代码--数据结构--LinkedList()

private void checkPositionIndex(int index) {         if (!isPositionIndex(index))             throw new IndexOutOfBoundsException(outOfBoundsMsg(index));     }     private boolean isPositionInde

ccdust的博客 407

LinkedList源代码阅读

LinkedList源代码阅读

weixin_62587914的博客 325

java数据结构arraylist和linkedlist

java数据结构arraylist和linkedlist 一,首先看看内存结构图: 二,详细描述: ArrayList: 可以看作是能够自动增长容量的数组 ArrayList 的toArray方法返回一个数组 ArrayList 的asList方法返回一个列表 ArrayList 底层的实现是Array, 数组扩容实现 ArrayList 线程不安全 ArrayList 必须是连续的 ArrayList 只能在数组末尾添加数据 ArrayList 查询快,增删慢 ArrayList 在

Jay112011的博客 1007

LinkedList 的简单操作 :插入 删除 正序、逆序遍历

package test812.night;import java.util.Iterator; import java.util.LinkedList; import java.util.List; import java.util.ListIterator;public class Test2 {public static void main(String[] args) { //

白鱼的博客 2922

Java 集合深入理解(11):LinkedList

点击查看 Java 集合框架深入理解 系列, - (-)つロ 乾杯~ 今天心情鱼肚白,来学学 LinkedList 吧! 日常开发中,保存一组数据使用的最多的就是 ArrayList, 其次就是 LinkedList 了。 我们知道 ArrayList 是以数组实现的,遍历时很快,但是插入、删除时都需要移动后面的元素,效率略差些。 而Li...

weixin_34117522的博客 1166

Java中对List集合内的元素进行顺序、倒序、随机排序的示例代码

import java.util.Collections; import java.util.LinkedList; import java.util.List;public class Test { List list = new LinkedList(); public static void main(String[] args) { Li

一毛钱开会员的博客 5400

掌握LinkedList的特殊方法,用LinkedList实现字符串反转输出

如输入 abcdefg输出 gfedcbaimport java.util.LinkedList; public class Linked { public static void main(String[] args) { String str = "abcdefg"; LinkedList&lt;Character&gt; list = new LinkedList&lt;Ch...

健健 5023

扣子Coze实战:情感早安电台全自动制作[可运行源码]

本文详细介绍了如何利用扣子(Coze)工作流实现情感早安电台的全自动制作流程。作者咕咕姐分享了从文案生成、配音合成到视频剪辑的完整步骤,通过扣子平台的大模型节点和第三方插件,用户只需输入一个主题即可自动生成治愈文案、配音、字幕、背景音乐及视频素材,最终输出可直接用于发布的剪映草稿。文章分三部分展开:第一部分详细拆解了28个节点的搭建流程,包括文案生成、时间处理、音频合成、视频剪辑等核心环节;第二部分提供了测试运行的具体方法;第三部分总结了全流程并提供了获取完整提示词的途径。该方法显著降低了内容创作门槛,使零基础用户也能高效产出高质量情感内容。

上一篇: 共同学习Java源代码--数据结构--LinkedList类(七)
下一篇: Lucene 6.2.1入门教程(一) 创建索引和基本搜索索引
达霁吧
博客等级 码龄15年 61粉丝 168原创
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值