Java实现自定义LinkedList类的示例代码

目录
  • 一、LinkedList和ArrayList
  • 二、自定义LinkedList类(单向链表)
    • 1、实现思路
    • 2、Node结点类
    • 3、size()、isEmpty()、get(int index)
    • 4、add(Object o)
    • 5、add(int index,Object element)
    • 6、test类

在正式讲解怎么自定义LinkedList类之前,需要再回顾一下之前学过的一些内容,避免跟ArrayList类混淆。

一、LinkedList和ArrayList

-- LinkedList ArrayList
联系 都是List的实现类,都在java.util包下
实现原理 通过链表操作数据 通过数组操作数据
什么时候使用 改查 增删

二、自定义LinkedList类(单向链表)

1、实现思路

LinkedList类跟ArrayList类不同,它通过指针以及结点的操作对链表进行增删改查

自定义LinkedList类的步骤

1、创建结点类,里面属性为Node类型的node结点、Object类型的数据

2、创建结点类的有参和无参构造方法

3、创建自己的LinkedList类实现List接口

4、在LinkedList类中新建一个结点对象以及声明一个size用于表示集合中的元素

5、实现size()、get() 、isEmpty()的方法(与ArrayList类似)

6、编写一个形参的add()方法

7、编写两个形参的add()方法

8、创建测试类对代码进行测试

2、Node结点类

里面有两个属性:结点和数据

结点的类型为Node

数据的类型为Object(因为不能够确定传入的数据具体是什么类型)

package MyLinkedList;

public class Node {
    // 定义数据
    Object data;
    // 定义下一结点
    Node next;

    public Node(Object data, Node next) {
        this.data = data;
        this.next = next;
    }

    public Node() {
    }
}

3、size()、isEmpty()、get(int index)

size()方法

@Override
    public int size() {
        return size;
    }

isEmpty()方法

 @Override
    public boolean isEmpty() {
        return size == 0;
    }

get(int index)方法

 @Override
    public Object get(int index) {
        Node p = node;
        for (int i = 0; i < index; i++) {
            p = p.next;
        }

        return p.data;
    }

4、add(Object o)

将接受到的数据插入最后即可

@Override
    public boolean add(Object o) {
        add(size, o);
        return true;
    }

5、add(int index,Object element)

 @Override
    public void add(int index, Object element) {
        // 找到需要插入的位置的结点
        Node p = node;
        for (int i = 0; i < index; i++) {
            p = p.next;
        }
        // 创建新结点
        Node node1 = new Node();

        // 将数据存入集合中
        node1.data = element;

        // 让node1的指针指向下一结点
        node1.next = p.next;

        // 确定node1的直接前驱结点
        p.next = node1;

        // 更新size
        size++;
    }

6、test类

循环从1开始的原因:因为在LinkedList类中最开始就创建了一个对象,如果从0开始就会看到打印结果为null

package MyLinkedList;

public class test {
    public static void main(String[] args) {
        LinkedList linkedList = new LinkedList();
        linkedList.add("111");
        linkedList.add("222");
        linkedList.add("333");
        linkedList.add("444");
        for (int i = 1; i < linkedList.size(); i++) {
            System.out.println(linkedList.get(i));
        }
        System.out.println("==================");
        linkedList.add(2,999);
        for (int i = 1; i < linkedList.size(); i++) {
            System.out.println(linkedList.get(i));
        }

    }
}

到此这篇关于Java实现自定义LinkedList类的示例代码的文章就介绍到这了,更多相关Java自定义LinkedList类内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • Java LinkedList集合功能实例解析

    由于LinkedList底层数据结构是链表,因此有一些特有的功能从链表对应到集合中. 框架代码: public class LinkedListDemo { public static void main(String[] args) { //创建集合对象 LinkedList<String> linkedList = new LinkedList<String>(); //添加元素 linkedList.add("hello"); linkedList.add

  • Java中LinkedList的模拟实现

    目录 关于LinkedList 模拟实现LinkedList 准备工作 头插 尾插 在任意位置插入 删除remove 删除removeAll 找元素下标indexOf 找元素下标lastIndexOf 判断链表是否包含某个元素 获得链表长度 链表判空 清空链表 关于LinkedList LinkedList的底层是用一个双向链表实现的,即一个结点中除了有一个引用指向下一个结点的地址,还有一个引用指向前一个结点的地址 LinkedList还有三个成员变量: size,表示该链表中结点的个数 fir

  • Java源码解析LinkedList

    本文基于jdk1.8进行分析. LinkedList和ArrayList都是常用的java集合.ArrayList是数组,Linkedlist是链表,是双向链表.它的节点的数据结构如下. private static class Node<E> { E item; Node<E> next; Node<E> prev; Node(Node<E> prev, E element, Node<E> next) { this.item = elemen

  • Java基础之容器LinkedList

    一.LinkedList的整体结构 1.1.LinkedList的继承关系 public class LinkedList<E> extends AbstractSequentialList <E> implements List<E>, Deque<E> LinkedList具备AbstractSequentialList的特点:AbstractSequentialList 只支持按次序访问,而不像 AbstractList 那样支持随机访问 Linked

  • Java实现双端链表LinkedList

    目录 一.LinkedList 介绍 二.LinkedList 使用 一.LinkedList 介绍 1️⃣LinkedList 是 Java 集合框架中一个重要的实现,其底层采用的双向链表结构,没有初始化大小,就是一直在前面或者后面新增就好.由于基于链表实现,存储元素过程中,无需像ArrayList那样进行扩容.2️⃣LinkedList 存储元素的节点需要额外的空间存储前驱和后继的引用.3️⃣LinkedList 在链表头部和尾部插入效率比较高,但在指定位置进行插入时,效率一般.原因是,在指

  • Java Linkedlist原理及实例详解

    这篇文章主要介绍了Java Linkedlist原理及实例详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 定义:linkedlist属于链表结构,方便添加和删除元素,但查询不方便,适用于对收尾的操作. 具有具体的对象,使用对象调用具体的方法 add // 添加元素 //在中间添加元素 arr.add("H"); addFirst:在集合最前面添加元素 // 在链表头部添加元素 arr.addFirst("F")

  • Java实现自定义LinkedList类的示例代码

    目录 一.LinkedList和ArrayList 二.自定义LinkedList类(单向链表) 1.实现思路 2.Node结点类 3.size().isEmpty().get(int index) 4.add(Object o) 5.add(int index,Object element) 6.test类 在正式讲解怎么自定义LinkedList类之前,需要再回顾一下之前学过的一些内容,避免跟ArrayList类混淆. 一.LinkedList和ArrayList -- LinkedList

  • Java实现自定义ArrayList类的示例代码

    目录 一.总体实现思路 二.add方法 三.size方法 四.isEmpty方法 五.构造方法 六.ArrayList整体代码 七.Test测试类 之前有接触过Collection中的ArrayList类,类中提供了多种可以操作的方法,但是为什么还需要自定义ArrayList类呢?主要是为了学习其中编写程序时的逻辑思维.,今天将简单的介绍ArrayList里面的add方法.size方法.isEmpty方法. 一.总体实现思路 在自定义ArrayList类时需要提前思考多个方面的内容 1.该Arr

  • Java服务器主机信息监控工具类的示例代码

    对接前端后效果展示如图: 1.CPU相关信息实体类 /** * CPU相关信息 * * @author csp */ public class Cpu { /** * 核心数 */ private int cpuNum; /** * CPU总的使用率 */ private double total; /** * CPU系统使用率 */ private double sys; /** * CPU用户使用率 */ private double used; /** * CPU当前等待率 */ priv

  • java树结构stream工具类的示例代码详解

    菜单实体类 package com.example.demo.entity; import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Data; import lombok.NoArgsConstructor; import java.util.List; @Data @Builder @AllArgsConstructor @NoArgsConstructor public class Menu { /**

  • 基于Java实现进制转换工具类的示例代码

    目录 背景 原理 十进制A转换为N进制R N进制R转换为十进制A 应用 延伸 背景 最近有个发送短信的功能,需要在短信中带有详情链接,链接中带有对应信息且要有校验功能,然而短信是按字数收费的,所以链接要尽可能的短.链接中带有数字类型参数,就想到通过低进制转高进制可以减少参数长度. 原理 低进制转换到高进制的时候可能会减少位数,例如二进制是满二进一,十进制是满十进一. 二进制:101001101 转换为对应的四进制为:11031 转换为对应的八进制为:515 转换为对应的十进制为:333 转换为对

  • Java中自定义注解类及使用实例解析

    这篇文章主要介绍了Java中自定义注解类并使用过程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 在Java框架中,经常会使用注解,而且还可以省很多事,来了解下自定义注解. 注解是一种能被添加到java代码中的元数据,类.方法.变量.参数和包都可以用注解来修饰.注解对于它所修饰的代码并没有直接的影响 先写一个自己的注解类 @Documented //会被javadoc命令识别 @Retention(RetentionPolicy.RUNTI

  • springboot 使用自定义的aspect的示例代码

    对某个类型中的方法进行拦截,然后加入固定的业务逻辑,这是AOP面向切面编程可以做的事,在springboot里实现aop的方法也有很多, spring-boot-starter-aop 或者 aspectjweaver 都是可以实现的,不过我们在实现之前,先来看一下aop里的几个概念. 概念 切面(Aspect):是指横切多个对象的关注点的一个模块化,事务管理就是J2EE应用中横切关注点的很好示例.在Spring AOP中,切面通过常规类(基本模式方法)或者通过使用了注解@Aspect的常规类来

  • 3分钟纯 Java 注解搭个管理系统的示例代码

    最近接触到个新项目,发现它用了一个比较有意思的框架,可以说实现了我刚入行时候的梦想,所以这里马不停蹄的和大家分享下. 在我刚开始工作接触的项目都还没做前后端分离,经常需要后端来维护页面,有时候觉得自己好像天生不适合干前端,你要是让我研究研究后端的技术,看个中间件源码啊,分析分析什么框架底层原理啊,这都问题不大,偶尔搞一下JS也可以.你要是让我写个css样式,那简直要命了,一点也提不起兴趣,不知道有没有跟我一样的. 今天要介绍的框架直接不用写页面了,话不多说,下边咱们直奔主题 Erupt一个通用后

  • Java实现简单的五子棋游戏示例代码

    目录 项目结构 核心代码 ArrComparator.java类 ChessMap.java类 ChessPanel.java类 效果图展示 项目结构 这个是在网上找的资源,出处记不得了,记录一下.程序的总体结构,很简单的: 核心代码 代码如下: ArrComparator.java类 import java.util.Comparator; /** * 排序 Comparator */ class ArrComparator implements Comparator<Object> { i

  • Java实现浪漫流星表白的示例代码

    目录 介绍 核心代码 注意事项 介绍 本文实现的功能有: 1.播放音乐 2.自定义流星数量.飞行速度.光晕大小.流星大小 3.自定义表白话语 运用到的知识点有: GUI:java实现窗体.Swing.其实JAVA Swing的GUI目前企业中已经不用了,主要是一些学校和培训机构用来教导学生写一些游戏.小项目,练练手的. 多线程:让cpu同一时间处理多个任务(本文中涉及到音乐.文字缓慢出现.流星线条移动) 效果图: 音乐类(其实也可以不用音乐,有些人并不喜欢): 核心代码 import javaz

随机推荐