Java-自定义LinkedList类

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

一、LinkedList和ArrayList

--LinkedListArrayList
联系都是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));
        }

    }
}

  • 5
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值