Java 集合框架 LinkedList 使用方法

LinkedList

  • LinkedList 是一个继承于AbstractSequentialList的双向链表。它也可以被当作堆栈、队列或双端队列进行操作。
  • LinkedList 实现 List 接口,能对它进行队列操作。
  • LinkedList 实现 Deque 接口,即能将LinkedList当作双端队列使用。
  • LinkedList 实现了Cloneable接口,即覆盖了函数clone(),能克隆。
  • LinkedList 实现java.io.Serializable接口,这意味着LinkedList支持序列化,能通过序列化去传输。
  • LinkedList 是非同步的。

缺陷:
LinkedList 是链表,与ArrayList相比,LinkedList插入、删除元素操作方便,性能高。但如果访问、查找元素,是遍历链表方式的,开销大,所以应尽量减少get(int location)、indexOf(Object object)的使用。

在实际运用中ArrayList 和 LinkedList 怎么选择?
查询、访问频繁:ArrayList
插入、删除频繁:LinkedList

LinkedList 使用方法:


addFirst();
将给定元素插入此列表的开头。

addLast();
将给定元素追加到此列表的结尾。

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

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

获取元素,但不删除元素,如果集合中没有元素,会出现NoSuchElementException


removeFirst();      
移除并返回此列表的第一个元素。
removeLast();
移除并返回此列表的最后一个元素。

获取元素,但是元素被删除,如果集合中没有元素,会出现NoSuchElementException


在JDK1.6出现了替代方法.

offerFirst();
将指定元素添加到此列表的头部(第一个元素)。
offerLast();
将指定元素添加到此列表的末尾(最后一个元素)。

// 找到但不移除此列表的头(第一个元素)。
peek(); 
peekFirst();    // 找到但不移除此列表的头(第一个元素)与peek方法一样。
peekLast();     // 找到但不移除此列表的尾(最后一个元素)。

// 获取元素,并把元素删除。如果集合中没有元素,会返回null
pollFirst();
pollLast();

  • 将LinkedList转换成ArrayList
ArrayList<String> arrayList = new ArrayList<String>(linkedList);
    for (String s : arrayList) {
      System.out.println("s = " + s);
    }
  • LinkedList可以作为FIFO(先进先出)的队列,作为FIFO的队列时,下表的方法等价:
队列方法       等效方法
add(e)        addLast(e)
offer(e)      offerLast(e)
remove()      removeFirst()
poll()        pollFirst()
element()     getFirst()
peek()        peekFirst()
  • LinkedList可以作为LIFO(后进先出)的栈,作为LIFO的栈时,下表的方法等价:
栈方法        等效方法
push(e)      addFirst(e)
pop()        removeFirst()
peek()       peekFirst()        // 找到并返回头部元素

LinkedList遍历方式

LinkedList支持多种遍历方式。建议不要采用随机访问的方式去遍历LinkedList,而采用逐个遍历的方式。
(01) 第一种,通过迭代器遍历。即通过Iterator去遍历。

for(Iterator iter = list.iterator(); iter.hasNext();)
    iter.next();

(02) 通过快速随机访问遍历LinkedList

int size = list.size();
for (int i=0; i<size; i++) {
    list.get(i);        
}

(03) 通过另外一种for循环来遍历LinkedList

for (Integer integ:list) 
    ;

(04) 通过pollFirst()来遍历LinkedList

while(list.pollFirst() != null)
    ;

(05) 通过pollLast()来遍历LinkedList

while(list.pollLast() != null)
    ;

(06) 通过removeFirst()来遍历LinkedList

try {
    while(list.removeFirst() != null)
        ;
} catch (NoSuchElementException e) {
}

(07) 通过removeLast()来遍历LinkedList

try {
    while(list.removeLast() != null)
        ;
} catch (NoSuchElementException e) {
}

遍历LinkedList时,使用removeFist()或removeLast()效率最高。但用它们遍历时,会删除原始数据;若单纯只读取,而不删除,应该使用第3种遍历方式foreach。无论如何,千万不要通过随机访问去遍历LinkedList!


参考文摘:
https://www.cnblogs.com/skywang12345/p/3308807.html

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值