游戏开发 LinkedList

 

  • inkedList底层是双向链表,一个节点挂着一个节点
  • LinkedList不需要设定长度,不需要扩容

LinkedList 的优缺点

  • 优点
    ① 往里面插入一些元素的时候不需要像ArrayList数组那样需要挪动大量的元素了,直接在链表里加入一个节点就可以了
    ② 如果要不断的往LinkedList中插入一些元素,大量的插入,就不需要像ArrayList那样还要去扩容了,人家就是一个链表,就是不断的把新的节点挂到链表上就可以了
  • 缺点
    ① 不适合用于随机查找。比如LinkedList.get(10)这种操作,性能很低,因为需要遍历这个链表,从头开始遍历这个链表,直到找到index=10的这个元素为止;而ArrayList.get(10),不需要遍历,直接根据内存的地址,根据你指定的index,直接定位到那个元素

使用场景

  • ArrayList:一般场景,都是用ArrayList来代表一个集合,只要别频繁的往里面插入和灌入大量的元素就可以了,主要用于查找
  • LinkedList:适合频繁的在list中插入和删除某个元素,然后LinkedList还额外实现了Deque接口,可以当做队列来使用

插入相关的方法

  • add():默认就是在队列的尾部插入一个元素
  • add(index,element):是在队列的中间也就是index位置插入一个元素
  • addFirst():在队列的头部插入一个元素
  • addLast():在队列的尾部插入一个元素,与add()调用的是同一个方法linkLast(E e)

获取相关的方法

  • getFirst()、peek():获取头部元素,其实就是直接返回 first 指针指向的那个 Node 里面的数据,都是返回头部的元素。getFirst()如果是对空 list 调用,会抛出异常;peek()对空 list 调用,会返回 null
  • getLast():获取尾部元素的元素
  • get():随机获取某个位置(index位置)的值,如果要获取某个随机位置的元素,需要使用 node(index)这个方法,是要进行链表的遍历,会判断一下index和 size>>1 进行比较,如果在前半部分,就会从头部开始遍历;如果是在后半部分,就会从尾部开始遍历
Node<E> node(int index) {
    // assert isElementIndex(index);
    // index < (size >> 1) 即 index < size/2
    // 代表在链表的前半部分
    // 会从头开始遍历
    if (index < (size >> 1)) {
        Node<E> x = first;
        for (int i = 0; i < index; i++)
            x = x.next;
        return x;
    } else {
        // index >= size/2
        // 代表在链表的后半部分
        // 会从尾部开始遍历
        Node<E> x = last;
        for (int i = size - 1; i > index; i--)
            x = x.prev;
        return x;
    }
}

删除相关的方法

  • removeLast():移除最后一个元素
  • removeFirst()、poll():移除第一个元素
  • remove(int index):移除随机位置的值

可以当做队列来使用

offer()往队尾插入元素,poll()从队头删除元素

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值