1.LinkedList的遍历方式

a.一般的for循环(随机访问)

int size = list.size();

for (int i=0; i

list.get(i);

}

b.for--each循环

for (Integer integ:list)

;

c.迭代器iterator

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

iter.next();

d.用pollFirst()来遍历LinkedList

while(list.pollFirst() != null)

;

e.用pollLast()来遍历LinkedList

while(list.pollLast() != null)

;

f.用removeFirst()来遍历LinkedList

try {

while(list.removeFirst() != null)

;

} catch (NoSuchElementException e) {

}

g.用removeLast()来遍历LinkedList

try {

while(list.removeLast() != null)

;

} catch (NoSuchElementException e) {

}

LinkedList遍历效率分析:

package com.sheepmu;

import java.util.Iterator;

import java.util.LinkedList;

import java.util.NoSuchElementException;

/*

* @author SheepMu

*/

public class LinkedListTest {

public static void main(String[] args) {

LinkedList llist = new LinkedList();

for (int i=0; i<100000; i++)

llist.addLast(i);

byCommonFor(llist) ;// 通过一般for循环来遍历LinkedList

byForEach(llist) ;  // 通过for-each来遍历LinkedList

byIterator(llist) ; // 通过Iterator来遍历LinkedList

byPollFirst(llist) ;    // 通过PollFirst()遍历LinkedList

byPollLast(llist) ; // 通过PollLast()遍历LinkedList

byRemoveFirst(llist) ;   // 通过removeFirst()遍历LinkedList

byRemoveLast(llist) ; // 通过removeLast()遍历LinkedList

}

private static void byCommonFor(LinkedList list) {// 通过一般for循环来遍历LinkedList

if (list == null)

return ;

long start = System.currentTimeMillis();

int size = list.size();

for (int i=0; i

list.get(i);

}

long end = System.currentTimeMillis();

long total = end - start;

System.out.println("byCommonFor------->" + total+" ms");

}

private static void byForEach(LinkedList list) {// 通过for-each来遍历LinkedList

if (list == null)

return ;

long start = System.currentTimeMillis();

for (Integer integ:list)

;

long end = System.currentTimeMillis();

long total = end - start;

System.out.println("byForEach------->" + total+" ms");

}

private static void byIterator(LinkedList list) {// 通过Iterator来遍历LinkedList

if (list == null)

return ;

long start = System.currentTimeMillis();

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

iter.next();

long end = System.currentTimeMillis();

long total = end - start;

System.out.println("byIterator------->" + total+" ms");

}

private static void byPollFirst(LinkedList list) {//通过PollFirst()遍历LinkedList

if (list == null)

return ;

long start = System.currentTimeMillis();

while(list.pollFirst() != null)

;

long end = System.currentTimeMillis();

long total = end - start;

System.out.println("byPollFirst------->" + total+" ms");

}

private static void byPollLast(LinkedList list) {// 通过PollLast()遍历LinkedList

if (list == null)

return ;

long start = System.currentTimeMillis();

while(list.pollLast() != null)

;

long end = System.currentTimeMillis();

long total = end - start;

System.out.println("byPollLast------->" + total+" ms");

}

private static void byRemoveFirst(LinkedList list) {// 通过removeFirst()遍历LinkedList

if (list == null)

return ;

long start = System.currentTimeMillis();

try {

while(list.removeFirst() != null)

;

} catch (NoSuchElementException e) {

}

long end = System.currentTimeMillis();

long total = end - start;

System.out.println("byRemoveFirst------->" + total+" ms");

}

private static void byRemoveLast(LinkedList list) {// 通过removeLast()遍历LinkedList

if (list == null)

return ;

long start = System.currentTimeMillis();

try {

while(list.removeLast() != null)

;

} catch (NoSuchElementException e) {

}

long end = System.currentTimeMillis();

long total = end - start;

System.out.println("byRemoveLast------->" + total+" ms");

}

}

byCommonFor------->5342 ms

byForEach------->11 ms

byIterator------->8 ms

byPollFirst------->4 ms

byPollLast------->0 ms

byRemoveFirst------->0 ms

byRemoveLast------->0 ms

由此可见,遍历LinkedList时,使用removeFist()或removeLast()效率最高。但用它们遍历时,会删除原始数据;若单纯只读取,而不删除,LinkedList遍历时建议使用For-each或者迭代器的方式。千万不要通过随机访问去遍历LinkedList!

2.LinkedList应用举例

a.LinkedList常用方法举例

package com.sheepmu;

import java.util.LinkedList;

/*

* @author SheepMu

*/

public class LinkedListTest {

public static void main(String[] args) {

commonMethods() ; // 测试LinkedList的常用方法

likeStack();// 将LinkedList当作 LIFO(后进先出)的堆栈

likeQueue(); // 将LinkedList当作 FIFO(先进先出)的队列

}

private static void commonMethods() {

LinkedList llist = new LinkedList();

llist.add("A");//添加元素

llist.add("B");

llist.add("C");

llist.add("D");

System.out.println("llist------->"+llist);

llist.add(1, "E");// 将“E”添加到第索引为1的个位置

System.out.println("添加E到索引为1的个位置后的llist------->"+llist);

llist.addFirst("X");//  将“X”添加到第一个位置。  失败的话,抛出异常!

System.out.println("在最前面添加X后的llist------->"+llist);

System.out.println("删除第一个元素并获得并返回被删除元素----->"+llist.removeFirst());  // 将第一个元素删除。

System.out.println("删除第一个元素后的llist------->"+llist);

llist.offerFirst("Y");// 将“Y”添加到第一个位置。  返回true。

System.out.println("将Y添加到第一个位置后的llist------->"+llist);

System.out.println("删除第一个元素并获得并返回被删除元素------>"+llist.pollFirst()); // 将第一个元素删除。

System.out.println("将第一个元素删除后的llist------->"+llist);

llist.removeLast() ;

System.out.println("移除最后一个元素后的llist------->"+llist);

llist.offerLast("Z"); //   将“Z”添加到最后一个位置

System.out.println("在最后添加Z后的llist------->"+llist);

llist.set(2, "M");// 将第3个元素设置M。

System.out.println("将第3个元素设置M后的llist------->"+llist);

System.out.println("size:"+llist.size());// LinkedList大小

llist.clear();// 清空LinkedList

}

private static void likeStack() { //将LinkedList作为栈使用!!!!!!!!!!!!

LinkedList stack = new LinkedList();

stack.push("A");//向栈中添加元素

stack.push("B");

stack.push("C");

stack.push("D");

System.out.println("stack--------->"+stack);

stack.pop() ;// 删除“栈顶元素”

System.out.println("删除栈顶后的stack--------->"+stack);

System.out.println("栈顶元素--------->"+stack.peek()); // 取出栈顶

}

private static void likeQueue() {//将LinkedList作为队列使用!!!!!!!!!!!!

LinkedList queue = new LinkedList();

queue.add("A");//向队列中添加元素

queue.add("B");

queue.add("C");

queue.add("D");

System.out.println("queue--------->"+queue);

queue.remove() ;//删除队列的第一个元素

System.out.println("删除队列的第一个元素后queue--------->"+queue);

System.out.println("队列第一个元素------->"+queue.element()); // 读取队列的第一个元素

}

}

llist------->[A, B, C, D]

添加E到索引为1的个位置后的llist------->[A, E, B, C, D]

在最前面添加X后的llist------->[X, A, E, B, C, D]

删除第一个元素并获得并返回被删除元素----->X

删除第一个元素后的llist------->[A, E, B, C, D]

将Y添加到第一个位置后的llist------->[Y, A, E, B, C, D]

删除第一个元素并获得并返回被删除元素------>Y

将第一个元素删除后的llist------->[A, E, B, C, D]

移除最后一个元素后的llist------->[A, E, B, C]

在最后添加Z后的llist------->[A, E, B, C, Z]

将第3个元素设置M后的llist------->[A, E, M, C, Z]

size:5

stack--------->[D, C, B, A]

删除栈顶后的stack--------->[C, B, A]

栈顶元素--------->C

queue--------->[A, B, C, D]

删除队列的第一个元素后queue--------->[B, C, D]

队列第一个元素------->B

java linklist 遍历_Java LinkList遍历方式相关推荐

  1. java中set的遍历_java中遍历set集合,java中set怎么遍历?

    之前给大家介绍了一下java对set对象进行去重的方法,那么下面接着给大家介绍的就是java中遍历set集合方法的内容,一起来了解一下具体方法吧! java中遍历set的三种方式:对set的遍历 1. ...

  2. java keyset 遍历_Java Map遍历keySet、entrySet速度对比

    第一种遍历方式(采用keySet): HashMap hashmap = new HashMap(); Iterator iterator = hashmap.keySet().iterator(); ...

  3. java实现序列化_java 序列化实现方式总结

    什么是序列化,可能大家都知道,但又不很清楚,呵呵,就像我一样,下面是一段百度百科的说明,说的很清楚,可以参考下 序列化 (serialization) 将对象的状态信息转换为可以存储或传输的窗体的过程 ...

  4. java集合的遍历_java集合遍历方法总结

    java集合遍历方法总结 一.for循环遍历集合 使用条件: ①能否确定集合中的元素个数 ②集合是否可以通过整数索引值来精确位置 public static void forTraversal(){ ...

  5. java 数组遍历_Java中遍历数组使用foreach循环还是for循环?

    从JDK1.5起,增加了新功能Foreach,它是for循环遍历数据的一种简写形式,使用的关键字依然是for,但参数格式不同.其详细用法为: for(Type e:collection){ //对变量 ...

  6. java 文件 递归_JAVA实现遍历文件夹下的所有文件(递归调用和非递归调用)

    JAVA 遍历文件夹下的所有文件(递归调用和非递归调用) 1.不使用递归的方法调用. public void traverseFolder1(String path) { int fileNum = ...

  7. java xml 递归_Java递归遍历XML所有元素

    import org.dom4j.Document; import org.dom4j.DocumentHelper; import org.dom4j.DocumentException; impo ...

  8. java map遍历_Java 循环遍历 Map

    import java.util.HashMap; import java.util.Iterator; import java.util.Map; public class MapTest { pu ...

  9. java 字符串数组遍历_java数组遍历、java方法定义

    1.遍历数组for与foreach String [] test =  {"java","php","bootstrap","vu ...

最新文章

  1. pandas使用apply函数将dataframe多个数据列整合为元组形式并生成新的数据列(combine multiple columns as a single column of tuples)
  2. 第三次学JAVA再学不好就吃翔(part80)--List三个子类的特点
  3. 浅谈Java和SAP ABAP的静态代理和动态代理,以及ABAP面向切面编程的尝试
  4. php浏览服务器某一文件夹内容,php删除web服务器中指定目录下的指定格式的文件...
  5. java自动触发_我们可以自动使用应用程序触发器调用后台任
  6. Linux 安装和卸载JDK
  7. Hybrid App的架构
  8. matlab与螺旋桨,基于Matlab的船用螺旋桨计算机实时仿真及GUI设计
  9. 图书条形码跟ISBN号互相转换的类 续
  10. Stream Editor 流编辑器命令
  11. 这届年轻人正在背着你偷偷攒钱
  12. 【STATA】ARIMA模型(含代码)
  13. ​大连商务英百家外语英语六级水平,适合报考BEC中级还是高级
  14. 对数正态随机数c语言程序,对数正态随机数
  15. 论文研读 —— 4. You Only Look Once Unified, Real-Time Object Detection (1/3)
  16. 腾讯技术跨越2019
  17. Apache Avro项目简介
  18. 生物医学文献知识图创建的关系提取
  19. 网络协议之:基于UDP的高速数据传输协议UDT
  20. 程序员笔试题---国信证券

热门文章

  1. Electron的学习笔记
  2. 强化学习——From drew追寻Mitsuha的学习笔记
  3. 自动驾驶——SimpleNet的学习笔记
  4. Youki的装机日记~
  5. Day2:360培训学习重点笔记(7.14)
  6. Java交替打印两个字符串
  7. 在有空字符串的有序字符串数组中查找(二分)
  8. 头条三面: String.valueOf、toString()、(String)强转,有啥区别?
  9. 【分享】用东野圭吾的方式说爱你
  10. Java的四种包访问权限