map和list遍历基础
本文属原创,转载请注明出处:http://www.cnblogs.com/robinjava77/p/5456085.html (Robin)
Map
1 import java.util.HashMap; 2 import java.util.Iterator; 3 import java.util.Map; 4 5 /** 6 * Created by robin on 2016/4/12. 7 * 8 * @author robin 9 */ 10 public class MapTest { 11 12 public static void main(String args[]){ 13 traversalKey(); 14 } 15 16 /** 17 * 在不知道map keys 的情况下 遍历map的key和value 18 * 19 * 总结 20 * 1.仅需要键(keys) map.keySet() 21 * 2.仅需要值(values) map.values() 22 * 3.使用的语言版本低于java 5,或是打算在遍历时删除entries,必须使用方法三 23 * 4.键值都要使用方法二。 24 */ 25 public static void traversalKey(){ 26 Map<String,String> map = new HashMap<String, String>(); 27 map.put("1","a"); 28 map.put("2","b"); 29 map.put("3","c"); 30 map.put("4","d"); 31 map.put("5","e"); 32 map.put("6","e"); 33 /**第一种方法:keySet() 获取key值,通过key值get Value 效率最低!由key get value 耗时*/ 34 for (String key:map.keySet()){ 35 System.out.println("key:"+key+"--value:"+map.get(key)); 36 } 37 /**第二种方法:Map.Entry 效率高于第一种,一般推荐这种写法*/ 38 for(Map.Entry<String,String> entry:map.entrySet()){ 39 System.out.println("key:"+entry.getKey()+"--value:"+entry.getValue()); 40 } 41 /**第三种方法:Iterator遍历 这种遍历方法新旧java版本皆通用,在遍历删除map的key-value时,这是唯一可选择的方法*/ 42 Iterator<Map.Entry<String, String>> entries = map.entrySet().iterator(); 43 while (entries.hasNext()) { 44 Map.Entry<String, String> entry = entries.next(); 45 System.out.println("Key = " + entry.getKey() + ", Value = " + entry.getValue()); 46 } 47 /**扩展 直接获取map的所有value值*/ 48 for(String value:map.values()){ 49 System.out.println(value); 50 } 51 52 } 53 }
List
1 import java.util.ArrayList; 2 import java.util.Iterator; 3 import java.util.List; 4 5 /** 6 * Created by robin on 2016/4/13. 7 * 关于list遍历有三种办法:①普通方法;②增强for循环;③iterator 8 * 效率 ①>③>② 9 * 10 * ①内部不锁定, 效率最高, 但是当写多线程时要考虑并发操作的问题 11 * ②内部实现是使用了③ 12 * ③执行过程中会进行数据锁定, 性能稍差 13 * 14 * list遍历删除数据建议采用方法③,若采用方法①,请使用倒序遍历删除,详情参考:ordinaryDelDesc; 15 * 不可使用②进行遍历删除,会产生bug 16 * @author robin 17 */ 18 public class ListTest { 19 20 public static void main(String args[]){ 21 List<Student> stuList = initList(); 22 /** 23 * 普通遍历方法 24 */ 25 for(int i= 0;i< stuList.size();i++){ 26 Student stuShow = stuList.get(i); 27 // System.out.println("stuId:"+stuShow.getStuId()+"----stuName:"+stuShow.getName()); 28 } 29 30 System.out.println("----普通遍历方法----"); 31 32 /** 33 * 增强for循环遍历 34 */ 35 for (Student stu:stuList){ 36 // System.out.println("stuId:"+stu.getStuId()+"----stuName:"+stu.getName()); 37 } 38 System.out.println("----增强for循环遍历----"); 39 /** 40 * Iterator 遍历 41 */ 42 Iterator<Student> iterator = stuList.iterator(); 43 while (iterator.hasNext()){ 44 Student stuShow = iterator.next(); 45 // System.out.println("stuId:"+stuShow.getStuId()+"----stuName:"+stuShow.getName()); 46 } 47 System.out.println("----Iterator循环遍历----"); 48 49 //list中删除元素方法 50 ordinaryDelAsc(initList()); 51 System.out.println("----普通遍历正序删除----"); 52 ordinaryDelDesc(initList()); 53 System.out.println("----普通遍历倒序删除----"); 54 // heighten(stuList); 55 iteratorDel(initList()); 56 System.out.println("----Iterator循环遍历删除----"); 57 } 58 59 public static List<Student> initList(){ 60 List<Student> stuList = new ArrayList<Student>(); 61 Student stuA = new Student("10001","路飞"); 62 stuList.add(stuA); 63 Student stuB = new Student("10002","索隆"); 64 stuList.add(stuB); 65 Student stuC = new Student("10003","山治"); 66 stuList.add(stuC); 67 Student stuD = new Student("10004","娜美"); 68 stuList.add(stuD); 69 Student stuE = new Student("10005","罗宾"); 70 stuList.add(stuE); 71 Student stuF = new Student("10006","乌索普--1号"); 72 stuList.add(stuF); 73 Student stuJ = new Student("10007","弗兰奇"); 74 stuList.add(stuJ); 75 Student stuH = new Student("10006","乌索普--2号"); 76 stuList.add(stuH); 77 Student stuK = new Student("10008","乔巴"); 78 stuList.add(stuK); 79 Student stuI = new Student("10006","乌索普--3号"); 80 stuList.add(stuI); 81 Student stuM = new Student("10006","乌索普--4号"); 82 stuList.add(stuM); 83 Student stuL = new Student("10009","布鲁克"); 84 stuList.add(stuL); 85 return stuList; 86 } 87 88 /** 89 * 普通遍历方法 正序 删除预期数据 90 * 这种方法存在bug:删除元素时涉及到数组元素的移动,遍历下标n的元素。 91 * 当前元素符合条件,执行删除操作,当前n位置的元素被删除,n+1位置的元素,移动到n位置上。 92 * 搜索光标却还是n,并未n-1,下次循环搜索时,会从下标n+1开始检索。 93 * 此时n+1位置的元素,原本是n+2的元素,那么此次循环遍历检索就会遗漏n+1位置的元素检查。 94 * 倘若n+1位置的元素符合删除条件,那么程序就将出现bug。 95 * 因为建议多用iterator进行遍历删除,如果非得使用普通循环遍历方法删除元素,请采用倒序的办法,详见ordinaryDesc 96 * @param stuList 97 */ 98 public static void ordinaryDelAsc(List<Student> stuList){ 99 for(int i= 0;i< stuList.size();i++){ 100 Student stuShow = stuList.get(i); 101 if(stuShow.getStuId().equals("10006")){ 102 stuList.remove(stuShow); 103 } 104 } 105 System.out.println(listToString(stuList)); 106 } 107 /** 108 * 普通遍历方法 倒序 删除预期数据 109 * @param stuList 110 */ 111 public static void ordinaryDelDesc(List<Student> stuList){ 112 for(int i= stuList.size()-1;i>0 ;i--){ 113 Student stuShow = stuList.get(i); 114 if(stuShow.getStuId().equals("10006")){ 115 stuList.remove(stuShow); 116 } 117 } 118 System.out.println(listToString(stuList)); 119 } 120 121 /** 122 * 增强for循环遍历删除预期数据 123 * @param stuList 124 */ 125 public static void heighten(List<Student> stuList){ 126 for (Student stu:stuList){ 127 if(stu.getStuId().equals("10006")){ 128 stuList.remove(stu); 129 } 130 } 131 System.out.println(listToString(stuList)); 132 } 133 134 /** 135 * Iterator 循环遍历删除预期数据 136 * @param stuList 137 * @return 138 */ 139 public static void iteratorDel(List<Student> stuList){ 140 Iterator<Student> iterator = stuList.iterator(); 141 while (iterator.hasNext()){ 142 Student stuShow = iterator.next(); 143 if(stuShow.getStuId().equals("10006")){ 144 iterator.remove(); 145 } 146 } 147 System.out.println(listToString(stuList)); 148 } 149 150 private static String listToString(List<Student> list){ 151 StringBuilder sb = new StringBuilder(""); 152 for (Student s:list){ 153 sb.append("[stuId:"+s.getStuId()+"---name:"+s.getName()+"] \n"); 154 } 155 return sb.toString(); 156 } 157 158 159 } 160 161 class Student{ 162 163 public Student(String stuId,String name){ 164 this.stuId =stuId; 165 this.name = name; 166 } 167 168 private String stuId; 169 170 private String name; 171 172 public void setStuId(String stuId){ 173 this.stuId = stuId; 174 } 175 176 public String getStuId(){ 177 return this.stuId; 178 } 179 180 public void setName(String name){ 181 this.name = name; 182 } 183 184 public String getName(){ 185 return this.name; 186 } 187 }
转载于:https://www.cnblogs.com/robinjava77/p/5456085.html
map和list遍历基础相关推荐
- [Java基础]Map集合的遍历
Map集合是Java中非常常用的一个集合,通过Map集合可以实现对数据的快速检索和插入删除等操作:同样对Map集合的遍历也是十分重要的:如果你之前学过C++,那么对于Map的遍历操作可就不能像是C++ ...
- android Map集合的遍历
今天,讲讲Set集合的遍历的使用. 1. Map集合的遍历之 键值对对象找 键和值: package cn.itcast_01;import java.util.HashMap; import jav ...
- 第三次学JAVA再学不好就吃翔(part92)--Map集合的遍历
学习笔记,仅供参考,有错必纠 Map集合的遍历 方法1(利用键找值) 由于Map集合中没有iterator方法,所以如果我们想要遍历Map,则需要先提取出键,拿到Set集合,再利用Set集合的iter ...
- Map集合的遍历方法
2019独角兽企业重金招聘Python工程师标准>>> Map集合的遍历方法 一.通过Map.Keyset遍历key和value,普遍使用,二次取值 //定义一个Map集合 Map ...
- 增强型for循环与Map集合的遍历
Map接口的遍历有以下几种方法: 使用map.values()方法,先把value的值都放在一个Collection集合中. 使用map.entrySet()方法. 使用map.keySet()方法. ...
- java遍历一个map集合_Java遍历Map集合的四种方式
Map 集合的遍历与 List 和 Set 集合不同.Map 有两组值,因此遍历时可以只遍历值的集合,也可以只遍历键的集合,也可以同时遍历.Map 以及实现 Map 的接口类(如 HashMap.Tr ...
- Map集合及遍历 debug用法 以及集合的斗地主应用练习 D190326
Map集合及遍历 debug用法 以及集合的斗地主应用练习 第一个独立应用:斗地主,分步骤一点点把项目拆分每一步去完成. 01_第一章:回顾_三种集合的存储方式: 02_第一章:Map集合_常用方法: ...
- Java实现List,Map,Set 遍历的多种方式
目录 一.简介 二.List的遍历方式 2.1.List常见初始化 2.2.普通for循环 2.3.增强for循环(推荐) 2.4.集合类通用遍历 2.5.lambda表达式forEach方法 2.6 ...
- 【java】Map集合的遍历方式有几种?
因为下一个博客想写Hashtable集合下的一个子类Properties集合,但是Map集合的遍历方式又有点遗忘了........... 下面通过API来复习一下: 文章目录 1. Map集合的第一种 ...
最新文章
- Web前端培训面试攻略
- 骁龙855在AI性能上真的秒杀麒麟980?噱头而已
- window.opener方法的使用 js跨域
- OSI参考模型与TCP/IP协议的比较研究
- python 冷门_Python最冷门的模块
- CALL注入--扫雷辅助(二)
- Deep Learning(深度学习)学习笔记整理(二)
- spring学习(10):创建项目(自动装配)
- 获取场景中指定类的实例
- LeetCode 16. 最接近的三数之和(固定左端+滑动窗口)
- zabbix系统日志文件监控key
- 最实用的清理IE命令 ClearMyTracksByProcess
- 分布式tensorflow测试代码
- Firefox浏览器版本66的下载链接
- 自动判卷 、答题卡识别、六级答题卡客观题自动判卷系统1.0
- Unity使用反射探头实现地面的镜面反射
- 大数据各岗位薪资多少?一张图告诉你答案
- 技术干货 | AlphaFold/ RoseTTAFold开源复现(1)—推理复现
- 新手初学iPhone开发的路线图
- 大咖 | 从Ian Goodfellow到Yann LeCun,对话Quora AI大佬TOP 10
热门文章
- java+mysql性能优化_Java培训实战教程之mysql优化
- 可持久化-可持久化字典树
- py获取前端的参数_微前端 qiankun 项目实践
- c语言运算符类型转换,C语言中强制类型转换运算符的独特作用
- java数组求和递归,js数组去重 数组拼接 替换数组中的指定值 递归数组 判断数组中是否存在指定值 数组求和 根据条件判数组值...
- 高亮屏幕一条条线_惠普Z24N G2显示器评测 设计师都想要的好屏幕
- python代码加密cython_利用Cython对python代码进行加密
- linux进程管理fork,Linux -- 进程管理之 fork() 函数
- 3算法全称_全网最通俗的KMP算法图解
- python3.5安装教程linux_linux安装python3.5