Java集合01----ArrayList的遍历方式及应用

前面已经学习了ArrayList的源代码,为了学以致用,故列举一些ArrayList的遍历方式及应用。JDK源代码学习系列04----ArrayList



1.ArrayList的遍历方式

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

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

b.增强型for循环(for-each)

Integer value = null;
for (Integer intvalue:list) {
value = intvalue;
}

c.迭代器

Integer value = null;
Iterator iter = list.iterator();
while (iter.hasNext()) {
value = (Integer)iter.next();
}

ArrayList三种遍历方式效率分析:

package com.sheepmu;
import java.util.*;
/*
* @author SheepMu
*/
public class MyTest {
public static void main(String[] args)
{
List<Integer> list = new ArrayList<Integer>();
for (int i=0; i<1000000; i++)
list.add(i);
byCommonFor(list) ;
byForEach(list) ;
byIterator(list) ;
} public static void byCommonFor(List<Integer> list) {
long startTime;
long endTime;
startTime = System.currentTimeMillis();
for (int i=0; i<list.size(); i++) {
list.get(i) ;
}
endTime = System.currentTimeMillis();
long totalTime = endTime - startTime;
System.out.println("byCommonFor------>" + totalTime +" ms");
}
public static void byForEach(List<Integer> list) {
long startTime;
long endTime;
startTime = System.currentTimeMillis(); for(Integer intvalue:list)
;
endTime = System.currentTimeMillis();
long totalTime = endTime - startTime;
System.out.println("ByFor-Each------>" + totalTime +" ms");
} public static void byIterator(List<Integer> list) {
long startTime;
long endTime;
startTime = System.currentTimeMillis();
for(Iterator iter = list.iterator(); iter.hasNext(); ) {
iter.next() ;
}
endTime = System.currentTimeMillis();
long totalTime = endTime - startTime;
System.out.println("byIterator------>" + totalTime +" ms");
} }

byCommonFor------>6   ms

ByFor-Each------>14   ms

byIterator------>10   ms

由此可见:遍历时随机訪问的效率是最高的。

可是个人还是推荐使用for-each来进行遍历,也是我最喜欢的遍历方式。

由于:foreach代码简洁美观,还有就是相对于下标循环而言的,foreach不必关心下标初始值和终止值及越界等,所以不易出错。

2.ArrayList的应用样例

  a.ArrayList经常用法举例

package com.sheepmu;

import java.util.ArrayList;
import java.util.List; /*
* @author SheepMu
*/
public class ArrayListTest { public static void main(String[] args) {
List<String> list = new ArrayList<String>(); //使用泛型 创建ArrayList
list.add("A");//向ArrayList中加入元素
list.add("B");
list.add("C");
list.add("D");
System.out.println("list-----> "+ list);
list.add(0, "E"); // 加入到最前面后其它后移
System.out.println("加入E后的list-----> "+ list);
System.out.println("第一个元素-----> "+ list.get(0)); // 获取第1个元素 list.remove("C"); // 删除“C”,后面的会前移
System.out.println("删除C后的list-----> "+ list);
System.out.println("Arraylist的大小----> "+ list.size()); // 获取ArrayList的大小
list.set(1, "X"); // 设置第2个元素为X
System.out.println("设置X后的list-----> "+ list); for(String s:list ) {//用for-each遍历
System.out.println("ArrayList中的每一个元素---> "+s);
} list.clear(); // 清空ArrayList
System.out.println("ArrayList是否为空----> "+ list.isEmpty()); // 推断ArrayList是否为空
}
}

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

加入E后的list-----> [E, A, B, C, D]

第一个元素-----> E

删除C后的list-----> [E, A, B, D]

Arraylist的大小----> 4

设置X后的list-----> [E, X, B, D]

ArrayList中的每一个元素---> E

ArrayList中的每一个元素---> X

ArrayList中的每一个元素---> B

ArrayList中的每一个元素---> D

ArrayList是否为空----> true

b.ArrayList的应用样例

eg1:输入一个表达式,没有括号。数字小于0-9之间。输出计算结果,全部的中间结果化为整形。 比如:  输入:3+8×2/9-2  输出:2

详见:华为上机题汇总----java第二题

package com.sheepmu;  

import java.util.ArrayList;
import java.util.List; /****
*输入一个表达式。没有括号,数字小于0-9之间,输出计算结果,全部的中间结果化为整形。 比如: 输入:3+8×2/9-2
输出:2 函数原型 . public int getMyRet(String str)
* @author sheepmu
*
*/
public class ArrayListTest {
public static void main(String[] args){
String s="3+8×2/9-2 ";
int result=getMyRet(s);
System.out.println("最后结果:"+result);
}
public static int getMyRet(String s1 ){
int len=s1.length();
List<String> list=new ArrayList<String>();
for(int i=0;i<len;i++)
list.add(s1.charAt(i)+"");//!!!!!
System.out.println("list--->"+ list);//list--->[3, +, 8, ×, 2, /, 9, -, 2, ]
for(int j=0;j<list.size();j++){ if(list.get(j).equals("×")){ int ji=Integer.parseInt(list.get(j-1))*Integer.parseInt(list.get(j+1));
list.add(j-1,ji+"");//把ji插入到原来x的前一位。原来的后移。从8開始往后移
list.remove(j);//删除8;remove是删除当前位置后后面的前移;故x到了j这个下标位置。 list.remove(j);//删除x
list.remove(j);//删除9
System.out.println("list--x后->"+ list);//list--x后->[3, +, 16, /, 9, -, 2, ]
j--;//相当于这次循环木有跳动下一个下标,由于立即要对ji參与运算,而不是跳过
}
else if(list.get(j).equals("/")){ int shang=Integer.parseInt(list.get(j-1))/Integer.parseInt(list.get(j+1));
list.add(j-1,shang+"");
list.remove(j);
list.remove(j);
list.remove(j);
System.out.println("list--/后->"+ list);//list--/后->[3, +, 1, -, 2, ]
j--;
}
} for(int k=0;k<list.size();k++){//这个时候是新的size
if(list.get(k).equals("+")){
int he=Integer.parseInt(list.get(k-1))+Integer.parseInt(list.get(k+1));
list.add(k-1,he+"");
list.remove(k);
list.remove(k);
list.remove(k);
System.out.println("list--+后->"+ list); //list--+后->[4, -, 2, ]
k--;
}
if(list.get(k).equals("-")){
int cha=Integer.parseInt(list.get(k-1))-Integer.parseInt(list.get(k+1));
list.add(k-1,cha+"");
list.remove(k);
list.remove(k);
list.remove(k);
System.out.println("list-- -后->"+ list); //list-- -后->[2, ]
k--;
}
}
int sum=Integer.parseInt(list.get(0));
return sum;
}
}

list--->[3, +, 8, ×, 2, /, 9, -, 2,  ]

list--x后->[3, +, 16, /, 9, -, 2,  ]

list--/后->[3, +, 1, -, 2,  ]

list--+后->[4, -, 2,  ]

list--  -后->[2,  ]

最后结果:2

eg2:加密后的QQ号为“6 3 1 75 8 9 2 4”,如今依照下面规则解密,规则是这种:首先将第1个数删除。紧接着将第2个数放到这串数的末尾,再将第3个数删除并将第4个数再放到这串数的末尾。再将第5个数删除……直到剩下最后一个数,将最后一个数也删除。依照刚才删除的顺序。把这些删除的数连在一起就是原始QQ号啦。解密后的号码为615947283

package com.sheepmu;  

import java.util.ArrayList;
import java.util.List; /****
* @author sheepmu */
public class ArrayListTest {
public static void main(String[] args){
List<Integer> list0=new ArrayList<Integer>();
List<Integer> list1=new ArrayList<Integer>();
list0.add(6);
list0.add(3);
list0.add(1);
list0.add(7);
list0.add(5);
list0.add(8);
list0.add(9);
list0.add(2);
list0.add(4);
while(list0.size()>0){
if(list0.size()==1){//注意仅仅剩一个时的特殊情况,仅仅把它放到原始号码中,已经没有元素再加入到末尾了。
list1.add(list0.remove(0));
}
else{
list1.add(list0.remove(0));
list0.add(list0.remove(0));
}
}
System.out.println(list1);
} }

[6, 1, 5, 9, 4, 7, 2, 8, 3]

Java集合01----ArrayList的遍历方式及应用的更多相关文章

  1. java 集合之Arraylist的遍历及排序

    最近培训是先学习java基础 从最基本的开始学起 因为今天刚刚开博客 要把上周的一些重点内容归纳一下 1.Arraylist常用遍历以及排序 import java.util.ArrayList; i ...

  2. java集合的三种遍历方式

    import java.util.ArrayList;  import java.util.Collection;import java.util.Iterator;public class Home ...

  3. Java(8)中List的遍历方式总结

    本篇文章主要讲述了List这一集合类型在Java,包括Java8中的遍历方式,不包括其他的过滤,筛选等操作,这些操作将会在以后的文章中得到提现,由List可以类推到Set等类似集合的遍历方式. pub ...

  4. 从源码看Java集合之ArrayList

    Java集合之ArrayList - 吃透增删查改 从源码看初始化以及增删查改,学习ArrayList. 先来看下ArrayList定义的几个属性: private static final int ...

  5. Java实现二叉树及相关遍历方式

    Java实现二叉树及相关遍历方式 在计算机科学中.二叉树是每一个节点最多有两个子树的树结构.通常子树被称作"左子树"(left subtree)和"右子树"(r ...

  6. Java中List集合的三种遍历方式(全网最详)

    List集合在Java日常开发中是必不可少的,只要懂得运用各种各样的方法就可以大大提高我们开发的效率,适当活用各种方法才会使我们开发事半功倍. 我总结了三种List集合的遍历方式,下面一一来介绍. 首 ...

  7. Java集合关于ArrayList

    ArrayList实现源码分析 2016-04-11 17:52 by 淮左, 207 阅读, 0 评论, 收藏, 编辑 本文将以以下几个问题来探讨ArrayList的源码实现1.ArrayList的 ...

  8. Java集合干货——ArrayList源码分析

    ArrayList源码分析 前言 在之前的文章中我们提到过ArrayList,ArrayList可以说是每一个学java的人使用最多最熟练的集合了,但是知其然不知其所以然.关于ArrayList的具体 ...

  9. java集合之ArrayList,TreeSet和HashMap分析

    java集合是一个重点和难点,如果我们刻意记住所有的用法与区别则是不太现实的,之前一直在使用相关的集合类,但是没有仔细研究区别,现在来把平时使用比较频繁的一些集合做一下分析和总结,目的就是以后在需要使 ...

  10. Java集合:ArrayList的实现原理

    Java集合---ArrayList的实现原理   目录: 一. ArrayList概述 二. ArrayList的实现 1) 私有属性 2) 构造方法 3) 元素存储 4) 元素读取 5) 元素删除 ...

随机推荐

  1. 用requests自动访问网页,下载网页内容

    import requests # 请求下载excel def downloading(text_path): # 访问要下载的链接文件 with open(text_path) as f: for ...

  2. Jboss性能调优

    1,Jboss5调优指南 https://www.redhat.com/f/pdf/JB_JEAP5_PerformanceTuning_wp_web.pdf 1,Jboss7.1 性能调优指南 a: ...

  3. Luogu【P1725】琪露诺(单调队列,DP)

    本文是笔者第二篇解题报告.从现在开始,会将练的一些题发到博客上并归类到"解题报告"标签中. 琪露诺是这样一道题 这道题可以用纯DP做,但是据说会超时.(为什么?看起来过河这题比它数 ...

  4. JSON树节点的增删查改

    最近了解到使用json字符串存到数据库的一种存储方式,取出来的json字符串可以进行相应的节点操作 故借此机会练习下递归,完成对json节点操作对应的工具类. 介绍一下我使用的依赖 复制代码 < ...

  5. BZOJ3990 [SDOI2015]排序 【搜索】

    题目 小A有一个1-2^N的排列A[1..2^N],他希望将A数组从小到大排序,小A可以执行的操作有N种,每种操作最多可以执行一次,对于所有的i(1<=i<=N),第i中操作为将序列从左到 ...

  6. 报错:java.lang.IllegalStateException

    java.lang.IllegalStateException: BeanFactory not initialized or already closed - call '“refresh”' be ...

  7. JAVA Apache POI 之sax 解析10万级大数量数据

    第一步让我们来看看我们的大量数据的excel 文件 好的下面第二步看一下代码: package com.chinait.utils; /** * 写这个东西主要是最近做了一个联通的数据迁移工作,他们就 ...

  8. 我要好offer之 排序算法大总结

    1. 插入排序 (1) 直接插入排序 void StraightInsertionSort(std::vector<int>& num) { || num.size() == ) ...

  9. unix网络编程第2章

    time_wait状态  可靠地实现tcp全双工连接的终止; (假设客户端先关闭).服务端再关闭,服务端将发送fin ,客户端此时进入time_wait状态.客户端接收到fin.将回一个ack.如果这 ...

  10. url相关

    #测试网址: http://localhost/blog/testurl.php?id=5 //获取域名或主机地址 echo$_SERVER['HTTP_HOST']."<br> ...