LinkedList(链表列表)

LinkedList主要有两种形式:单向链表和双向链表(一般会用 双向链表)

  • 根据API1.6中可以知道:

1.和ArrayList一样,LinkedList是线程不同步的,同步可用方法:
List list = Collections.synchronizedList(new LinkedList(…));

2.此类实现List 接口。LinkedList 类还为在列表的开头及结尾 get、remove 和 insert 元素提供了统一的命名方法。这些操作使LinkedList既可以看做是一个队列(Queue),又可以看做一个栈(Stack)。即当我们想要使用队列或栈时,可以考虑使用LinkedList,由于Java官方声明不建议使用Stack类(stack在底层继承vector),Queue只是一个接口。关于栈和队列现在首选ArrayDeque,在实现栈和队列的问题上它有着更好的性能。

3.此类实现 Deque 接口,为 add、poll 提供先进先出队列操作,以及其他堆栈和双端队列操作。

4.LinkedList的每个节点用内部类Node表示

LinkedList和ArrayList比较

  • 查询和修改用ArrayList
  • 删除和添加用LinkedList
在LinkedList中的查询方法同样也用的get(int index)方法为什么比ArrayList中的get(int index)方法速度慢呢?

ArrayList在底层操作的是数组,也就是在内存中是一片连续的空间,所以可以直接获得index相对应的元素

LinkedList是链表在内存中不是一段连续的空间,所以当get(in)时,必须从首元素开始一次获得下一个元素的index,直到与in相等。

在知乎上看到一个前辈说的很好的一个例子
假如有很多人,排成长队,这个时候要找5号的人就非常简单,问都不用问,直接定位。假如不排成长队,只是随机站在很大的广场里面,但是每个人只知道自己的前一个人和后一个人的位置,而且你只知道第一个人的位置,这个时候你要找第5个人的时候你就得从第一个人开始问后面的是谁,一直问下去才知道第5个人在哪里。 

LinkedList中的常用方法

LinkedList中存在的方法和ArrayList中的方法基本一样,在此列举几个常用的。
在LinkedList中也有对索引的操作,此操作是基于Node内部类的基础上的。
由于LinkedList中有addFirst(),addLast(),getFirst(),getLast()方法,所以用LinkedList实现Queue,队列只是特定功能的LinkedList,二者实现的方法是一样的。

  • add

两种情况:
public boolean add(E e)
将指定元素添加到此列表的结尾。 此方法等效于 addLast(E)。
public void add(int index,E element)
在此列表中指定的位置插入指定的元素。移动当前在该位置处的元素(如果有),所有后续元素都向右移(在其索引中添加 1)。

  • addFirst

public void addFirst(E e)
将指定元素插入此列表的开头。

  • addLast

public void addLast(E e)
将指定元素添加到此列表的结尾。

  • get

public E get(int index)
返回此列表中指定位置处的元素。

  • getFirst

public E getFirst()
返回此列表的第一个元素。

  • getLast

public E getLast()
返回此列表的最后一个元素。

  • set

public E set(int index,E element)
将此列表中指定位置的元素替换为指定的元素。

  • remove

public E remove()
获取并移除此列表的头(第一个元素)。

  • remove
    public E remove(int index)
    移除此列表中指定位置处的元素。将任何后续元素向左移(从索引中减 1)。返回从列表中删除的元素。

  • remove

public boolean remove(Object o)
从此列表中移除首次出现的指定元素(如果存在)。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值