java LinkedList

  • LinkedList实现了双向链表和双端队列特点
  • 可以添加任意元素(元素可以重复),包括null
  • 线程不安全,没有实现同步
  • LinkedList底层维护了一个双向链表
  • LinkedList中维护了两个属性firstlast分别指向首节点尾节点
  • 每个节点(Node对象),里面又维护了prev,next,item三个属性,其中通过prev指向前一个,通过next指向后一个节点,最终实现双向链表
  • 所以LinkedList的元素的添加和删除,不是通过数组完成的,相对效率较高
public class LinkedListDemo01 {
    public static void main(String[] args) {
        // 模拟一个简单的双向链表
        Node jack = new Node("jack");
        Node tom = new Node("tom");
        Node ll = new Node("ll");

        // 连接三个节点, 形成双向链表
        // jack => tom => ll
        jack.next = tom;
        tom.next = ll;

        // ll => tom => jack
        ll.prev = tom;
        tom.prev = jack;

        // 让first引用指向jack,也就是双向链表的首节点
        Node first = jack;

        // 让last引用指向ll,也就是双向链表的尾结点
        Node last = ll;

        // 演示从头到尾进行遍历
        while (true) {
            if (first == null) {
                break;
            }

            //输出first信息
            System.out.println(first);
            first = first.next;
        }

        System.out.println("=========");

        // 从尾到头遍历
        while (true) {
            if (last == null) {
                break;
            }

            // 输出end信息
            System.out.println(last);
            last = last.prev;
        }

        System.out.println("=========");

        // 演示链表添加对象/数据,是多么快速方便
        // 要求在 tom和ll之间,插入一个对象java

        // 1.创建对象
        Node java = new Node("java");

        // jack => tom => ll
        java.prev = tom;
        java.next = ll;

        ll.prev = java;
        tom.next = java;

        // 让first引用指向jack,也就是双向链表的首节点
        first = jack;

        // 演示从头到尾进行遍历
        while (true) {
            if (first == null) {
                break;
            }

            //输出first信息
            System.out.println(first);
            first = first.next;
        }
    }
}

// 定义一个Node类, Node对象表示双向链表的一个节点
class Node {
    /**
     * 真正存放数据
     */
    public Object item;

    /**
     * 指向下一个节点
     */
    public Node next;

    /**
     * 指向上一个节点
     */
    public Node prev;

    public Node(Object item) {
        this.item = item;
    }

    @Override
    public String toString() {
        return "Node name = " + item;
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值