Java LinkList遍历方式
1.LinkedList的遍历方式
a.一般的for循环(随机访问)
- int size = list.size();
- for (int i=0; i<size; 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<Integer> llist = new LinkedList<Integer>();
- 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<Integer> list) {// 通过一般for循环来遍历LinkedList
- if (list == null)
- return ;
- long start = System.currentTimeMillis();
- int size = list.size();
- for (int i=0; i<size; i++) {
- list.get(i);
- }
- long end = System.currentTimeMillis();
- long total = end - start;
- System.out.println("byCommonFor------->" + total+" ms");
- }
- private static void byForEach(LinkedList<Integer> 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<Integer> 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<Integer> 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<Integer> 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<Integer> 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<Integer> 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<String> llist = new LinkedList<String>();
- 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<String> stack = new LinkedList<String>();
- 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<String> queue = new LinkedList<String>();
- 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 map遍历方式及效率
本文转载自Java Map遍历方式的选择. 只给出遍历方式及结论.测试数据可以去原文看. 如果你使用HashMap 同时遍历key和value时,keySet与entrySet方法的性能差异取决于ke ...
- Java Map遍历方式的选择
[原文] 1. 阐述 对于Java中Map的遍历方式,很多文章都推荐使用entrySet,认为其比keySet的效率高很多.理由是:entrySet方法一次拿到所有key和value的集合:而keyS ...
- 分析轮子(八)- List.java 各种遍历方式及遍历时移除元素的方法
注:玩的是JDK1.7版本 1:先尝栗子,再分析,代码简单,注释清晰,可自玩一下 /** * @description:测试集合遍历和移除元素的方式 * @author:godtrue * @crea ...
- Java HashMap 遍历方式探讨
JDK8之前,可以使用keySet或者entrySet来遍历HashMap,JDK8中引入了map.foreach来进行遍历. keySet其实是遍历了2次,一次是转为Iterator对象,另一次是从 ...
- Java Map各遍历方式的性能比较
1. 阐述 对于Java中Map的遍历方式,很多文章都推荐使用entrySet,认为其比keySet的效率高很多.理由是:entrySet方法一次拿到所有key和value的集合:而keySet拿到的 ...
- Java 集合 ArrayList和LinkedList的几种循环遍历方式及性能对比分析 [ 转载 ]
Java 集合 ArrayList和LinkedList的几种循环遍历方式及性能对比分析 @author Trinea 原文链接:http://www.trinea.cn/android/arrayl ...
- Java中List集合的三种遍历方式(全网最详)
List集合在Java日常开发中是必不可少的,只要懂得运用各种各样的方法就可以大大提高我们开发的效率,适当活用各种方法才会使我们开发事半功倍. 我总结了三种List集合的遍历方式,下面一一来介绍. 首 ...
- java集合遍历的几种方式总结及比较
集合类的通用遍历方式, 用迭代器迭代: Iterator it = list.iterator(); while(it.hasNext()) { Object obj = it.next(); } ...
- 【Java】集合遍历--List和Map的多种遍历方式
1. List的两种遍历方式 package com.nova.test; import java.util.ArrayList; import java.util.Iterator; import ...
随机推荐
- 【转】Linux的五个查找命令:find,locate,whereis,which,type
原文网址:http://www.ruanyifeng.com/blog/2009/10/5_ways_to_search_for_files_using_the_terminal.html 最近,我在 ...
- 设置zedgraph鼠标拖拽和局部放大属性(转帖)
说一下几个属性的意义和具体应用: (1)鼠标拖拽显示区域 PanModifierKeys ->> Gets or sets a value that determines which mo ...
- Cenots7对lvm逻辑卷分区大小的调整
Cenots7对lvm逻辑卷分区大小的调整 (针对xfs和ext4不同文件系统) 1.支持的文件系统类型 特别注意的是: resize2fs命令 针对的是ext2.ext3.ex ...
- Git密钥生成步骤SSH Key
顺便推荐下自己的网站: 一个php后台极速开发框架 https://www.lotusadmin.top/ 一个有趣的网站 https://www.waytomilky.com/ Git是分布式的代码 ...
- axis2开发webservice总结
需求环境:对接方公司提供wsdl文件,我方按照该wsdl文件开发服务端. 配置axis2开发环境,网上教程很多,不再啰嗦.环境搭好后执行wsdl2java -uri file:///C:/Users/ ...
- JS时间(日期)比较或相减(暂时停用)
注:此文均来自网上,可行,只供参考 //JAVASCRIPT中 日期相减很麻烦 ,现在有现成的实现方法,拷贝过去就可以用了,方便 //调用该方法(主方法) function dateDiff(date ...
- c# 与 java 语法异同
Java and C# ComparisonThis is a quick reference guide to highlight some key syntactical differences ...
- 杂项:IIS
ylbtech-杂项:IIS IIS是Internet Information Services的缩写,意为互联网信息服务,是由微软公司提供的基于运行Microsoft Windows的互联网基本服务 ...
- Appium简介和初步使用520-1
1.移动互联网架构简化图 2.Appium的优势 * 多种开发模式支持 native hybrid webview * 多平台支持 android ios * 跨语言 java python ruby ...
- sql中存储过程打印返回的记录集
declare --返回结果,记录类型 ret sys_refcursor; --定义一种类型,用来存放返回的记录 type typ_row ), QUEUEID ), QUEUE_NAME )); ...