Java中的集合之LinkedList,Queue

讨论集合关注的问题:底层数据结构增删改查方式初始容量,扩容方式,扩容时机线程安全与否是否允许空,是否允许重复,是否有序我们都知道Collection接口派生出三大类的子接口List,Set和Queue。今天继续看List这个系列下的LinkedList,关于ArrayList和Vector前篇已经讲过。Java集合之ArrayList,Vector和StackLinkedL...
摘要由CSDN通过智能技术生成

讨论集合关注的问题:

  1. 底层数据结构
  2. 增删改查方式
  3. 初始容量,扩容方式,扩容时机
  4. 线程安全与否
  5. 是否允许空,是否允许重复,是否有序

我们都知道Collection接口派生出三大类的子接口List,Set和Queue。今天继续看List这个系列下的LinkedList,关于ArrayList和Vector前篇已经讲过。

Java集合之ArrayList,Vector和Stack

LinkedList和ArrayList都属于List集合的“范畴”,很大程度上与LinkedList的使用方式类似,区别主要在底层的实现上。顾名思义,LinkedList其底层采用了链表的方式来维护集合中的数据。而Queue队列,是3大类中比较特殊的一类,其子类较少,一般和其他的集合中进行关系的维护。例如LinkedList中就使用了一个双向队列。

 

LinkedList

LinkedList是一个List接口的“范畴”,我这里说的并不准确,但是一般在开发中采用的“接口+实现类”的方式中,就经常使用List接口来指向其被实现的类,这样大部分的增删改查的操作方法都可以使用自List接口的调用。

LinkedList继承自AbstractSequentialList(AbstractList的子类)类,实现了List, Deque, Cloneable, Serializable,说明LinkedList可以进行克隆和序列化操作,其在序列化时,会序列化所有的非空数据。

LinkedList使用一个头结点first,一个尾节点last,和一个内部类Node来维护集合中的数据,Node是一个具有前后指针的节点结构,来完成链表的双向操作。

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 = element;
            this.next = next;
            this.prev = prev;
        }
    }

添加新的元素时,默认添加到链表的末尾。同样可以指定添加的位置,都需要通过first指针一直遍历下去,知道找到合适的位置。添加元素主要是linklast和linkbefore两个方法:

	public void add(int index, E element) {
        checkPositionIndex(index);

        if (index == size)
            linkLast(element);
        else
            linkBefore(element, node(index));
    }	
	void linkLast(E e) {
        final Node<E> l = last;
        final Node<E> newNode
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值