通过一个实例介绍 LinkedList 中常用API的用法

import java.util.List;
  2 import java.util.Iterator;
  3 import java.util.LinkedList;
  4 import java.util.NoSuchElementException;
  5 
  6 /*
  7  * @desc LinkedList测试程序。
  8  *
  9  * @author skywang
 10  * @email  kuiwu-wang@163.com
 11  */
 12 public class LinkedListTest {
 13     public static void main(String[] args) {
 14         // 测试LinkedList的API
 15         testLinkedListAPIs() ;
 16 
 17         // 将LinkedList当作 LIFO(后进先出)的堆栈
 18         useLinkedListAsLIFO();
 19 
 20         // 将LinkedList当作 FIFO(先进先出)的队列
 21         useLinkedListAsFIFO();
 22     }
 23     
 24     /*
 25      * 测试LinkedList中部分API
 26      */
 27     private static void testLinkedListAPIs() {
 28         String val = null;
 29         //LinkedList llist;
 30         //llist.offer("10");
 31         // 新建一个LinkedList
 32         LinkedList llist = new LinkedList();
 33         //---- 添加操作 ----
 34         // 依次添加1,2,3
 35         llist.add("1");
 36         llist.add("2");
 37         llist.add("3");
 38 
 39         // 将“4”添加到第一个位置
 40         llist.add(1, "4");
 41         
 42 
 43         System.out.println("\nTest \"addFirst(), removeFirst(), getFirst()\"");
 44         // (01) 将“10”添加到第一个位置。  失败的话,抛出异常!
 45         llist.addFirst("10");
 46         System.out.println("llist:"+llist);
 47         // (02) 将第一个元素删除。        失败的话,抛出异常!
 48         System.out.println("llist.removeFirst():"+llist.removeFirst());
 49         System.out.println("llist:"+llist);
 50         // (03) 获取第一个元素。          失败的话,抛出异常!
 51         System.out.println("llist.getFirst():"+llist.getFirst());
 52 
 53 
 54         System.out.println("\nTest \"offerFirst(), pollFirst(), peekFirst()\"");
 55         // (01) 将“10”添加到第一个位置。  返回true。
 56         llist.offerFirst("10");
 57         System.out.println("llist:"+llist);
 58         // (02) 将第一个元素删除。        失败的话,返回null。
 59         System.out.println("llist.pollFirst():"+llist.pollFirst());
 60         System.out.println("llist:"+llist);
 61         // (03) 获取第一个元素。          失败的话,返回null。
 62         System.out.println("llist.peekFirst():"+llist.peekFirst());
 63     
 64 
 65         System.out.println("\nTest \"addLast(), removeLast(), getLast()\"");
 66         // (01) 将“20”添加到最后一个位置。  失败的话,抛出异常!
 67         llist.addLast("20");
 68         System.out.println("llist:"+llist);
 69         // (02) 将最后一个元素删除。        失败的话,抛出异常!
 70         System.out.println("llist.removeLast():"+llist.removeLast());
 71         System.out.println("llist:"+llist);
 72         // (03) 获取最后一个元素。          失败的话,抛出异常!
 73         System.out.println("llist.getLast():"+llist.getLast());
 74 
 75 
 76         System.out.println("\nTest \"offerLast(), pollLast(), peekLast()\"");
 77         // (01) 将“20”添加到第一个位置。  返回true。
 78         llist.offerLast("20");
 79         System.out.println("llist:"+llist);
 80         // (02) 将第一个元素删除。        失败的话,返回null。
 81         System.out.println("llist.pollLast():"+llist.pollLast());
 82         System.out.println("llist:"+llist);
 83         // (03) 获取第一个元素。          失败的话,返回null。
 84         System.out.println("llist.peekLast():"+llist.peekLast());
 85 
 86          
 87 
 88         // 将第3个元素设置300。不建议在LinkedList中使用此操作,因为效率低!
 89         llist.set(2, "300");
 90         // 获取第3个元素。不建议在LinkedList中使用此操作,因为效率低!
 91         System.out.println("\nget(3):"+llist.get(2));
 92 
 93 
 94         // ---- toArray(T[] a) ----
 95         // 将LinkedList转行为数组
 96         String[] arr = (String[])llist.toArray(new String[0]);
 97         for (String str:arr) 
 98             System.out.println("str:"+str);
 99 
100         // 输出大小
101         System.out.println("size:"+llist.size());
102         // 清空LinkedList
103         llist.clear();
104         // 判断LinkedList是否为空
105         System.out.println("isEmpty():"+llist.isEmpty()+"\n");
106 
107     }
108 
109     /**
110      * 将LinkedList当作 LIFO(后进先出)的堆栈
111      */
112     private static void useLinkedListAsLIFO() {
113         System.out.println("\nuseLinkedListAsLIFO");
114         // 新建一个LinkedList
115         LinkedList stack = new LinkedList();
116 
117         // 将1,2,3,4添加到堆栈中
118         stack.push("1");
119         stack.push("2");
120         stack.push("3");
121         stack.push("4");
122         // 打印“栈”
123         System.out.println("stack:"+stack);
124 
125         // 删除“栈顶元素”
126         System.out.println("stack.pop():"+stack.pop());
127         
128         // 取出“栈顶元素”
129         System.out.println("stack.peek():"+stack.peek());
130 
131         // 打印“栈”
132         System.out.println("stack:"+stack);
133     }
134 
135     /**
136      * 将LinkedList当作 FIFO(先进先出)的队列
137      */
138     private static void useLinkedListAsFIFO() {
139         System.out.println("\nuseLinkedListAsFIFO");
140         // 新建一个LinkedList
141         LinkedList queue = new LinkedList();
142 
143         // 将10,20,30,40添加到队列。每次都是插入到末尾
144         queue.add("10");
145         queue.add("20");
146         queue.add("30");
147         queue.add("40");
148         // 打印“队列”
149         System.out.println("queue:"+queue);
150 
151         // 删除(队列的第一个元素)
152         System.out.println("queue.remove():"+queue.remove());
153     
154         // 读取(队列的第一个元素)
155         System.out.println("queue.element():"+queue.element());
156 
157         // 打印“队列”
158         System.out.println("queue:"+queue);
159     }

160 }

Test "addFirst(), removeFirst(), getFirst()"llist:[10, 1, 4, 2, 3]llist.removeFirst():10llist:[1, 4, 2, 3]llist.getFirst():1Test "offerFirst(), pollFirst(), peekFirst()"llist:[10, 1, 4, 2, 3]llist.pollFirst():10llist:[1, 4, 2, 3]llist.peekFirst():1Test "addLast(), removeLast(), getLast()"llist:[1, 4, 2, 3, 20]llist.removeLast():20llist:[1, 4, 2, 3]llist.getLast():3Test "offerLast(), pollLast(), peekLast()"llist:[1, 4, 2, 3, 20]llist.pollLast():20llist:[1, 4, 2, 3]llist.peekLast():3get(3):300str:1str:4str:300str:3size:4isEmpty():trueuseLinkedListAsLIFOstack:[4, 3, 2, 1]stack.pop():4stack.peek():3stack:[3, 2, 1]useLinkedListAsFIFOqueue:[10, 20, 30, 40]queue.remove():10queue.element():20queue:[20, 30, 40]

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种遍历方式。
无论如何,千万不要通过随机访问去遍历LinkedList!

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值