博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
一些方便的遍历方法
阅读量:3888 次
发布时间:2019-05-23

本文共 2321 字,大约阅读时间需要 7 分钟。

遍历使用的场合:

1、传统的for循环遍历,基于计数器的:

顺序存储:读取性能比较高。适用于遍历顺序存储集合。
链式存储:时间复杂度太大,不适用于遍历链式存储的集合。
2、迭代器遍历,Iterator:
顺序存储:如果不是太在意时间,推荐选择此方式,毕竟代码更加简洁,也防止了Off-By-One的问题。
链式存储:意义就重大了,平均时间复杂度降为O(n),还是挺诱人的,所以推荐此种遍历方式。
3、foreach循环遍历:
foreach只是让代码更加简洁了,但是他有一些缺点,就是遍历过程中不能操作数据集合(删除等),所以有些场合不使用。而且它本身就是基于Iterator实现的,但是由于类型转换的问题,所以会比直接使用Iterator慢一点,但是还好,时间复杂度都是一样的。所以怎么选择,参考上面两种方式,做一个折中的选择。

遍历方法的实现原理:

1、传统的for循环遍历,基于计数器的:

遍历者自己在集合外部维护一个计数器,然后依次读取每一个位置的元素,当读取到最后一个元素后,停止。主要就是需要按元素的位置来读取元素。
2、迭代器遍历,Iterator:
每一个具体实现的数据集合,一般都需要提供相应的Iterator。相比于传统for循环,Iterator取缔了显式的遍历计数器。所以基于顺序存储集合的Iterator可以直接按位置访问数据。而基于链式存储集合的Iterator,正常的实现,都是需要保存当前遍历的位置。然后根据当前位置来向前或者向后移动指针。
3、foreach循环遍历:
根据反编译的字节码可以发现,foreach内部也是采用了Iterator的方式实现,只不过Java编译器帮我们生成了这些代码

list遍历方法(1)

private void testList(List
list) { for (int i = 0; i < list.size(); i ++) { System.out.print(list.get(i) + " "); } System.out.println();}

list遍历方法(2)(增强for)

private void testList(List
list) { for (String string : list) { System.out.print(string + " "); } System.out.println();}

list遍历方法(3)(迭代器:当遍历的过程中需要删除或者添加元素)

private void testList(List
list) { Iterator
it = list.iterator(); while (it.hasNext()) { String value = it.next(); System.out.print(value + " "); } System.out.println();}}

map遍历方法(1)(该方法只能获取到value无法获取到key)

private void testMap(Map
map) { Collection
cMap = map.values(); for (String string : cMap) { System.out.println(string); }}

map遍历方法(2)(迭代器:entry)

private void testMap(Map
map) { Iterator
> iterator = map.entrySet().iterator(); while (iterator.hasNext()) { Entry
entry = iterator.next(); System.out.println(entry.getKey() + ":" + entry.getValue()); }}

map遍历方法(3)(迭代器:key值)

private void testMap(Map
map) { Iterator
it = map.keySet().iterator(); while (it.hasNext()) { String key = it.next(); String value = map.get(key); }}

set遍历方法(1)(增强for)

private void testSet(Set
set) { for (String string:set) { value = string; }}

set遍历方法(2)(迭代器)

private void testSet(Set
set) { Iterator
it = set.iterator(); while(it.hasNext()) { String value = it.next(); }

转载地址:http://ezshn.baihongyu.com/

你可能感兴趣的文章
Memcached 集群部署
查看>>
Memcached与Spring AOP构建数分布式据库前端缓存框架
查看>>
数据挖掘常用算法整理
查看>>
JNDI学习总结(一)——JNDI数据源的配置
查看>>
JNDI学习总结(二)——Tomcat下使用C3P0配置JNDI数据源
查看>>
JNDI学习总结(三)——Tomcat下使用Druid配置JNDI数据源
查看>>
JavaWeb学习总结(四十九)——简单模拟Sping MVC
查看>>
Struts1和Struts2的区别和对比(完整版)
查看>>
在Eclipse中初用lucene
查看>>
lucene在eclipse下运行
查看>>
eclipse 安装struts2 插件
查看>>
Liferay配置文件Tag标签参考
查看>>
JavaLiferay研究之十六:FCKeditor如何插入服务器上的资源?
查看>>
Liferay研究之十二:对Liferay框架的几点分析总结 收藏
查看>>
Eclipse快捷键大全(转载)
查看>>
Google爬虫如何抓取JavaScript的?
查看>>
SAP HANA SQL/MDX及TCP/IP端口介绍
查看>>
SAP HANA使用XS和HTTP创建proxy
查看>>
SAP HANA SLT在表中隐藏字段并传入HANA的方法
查看>>
SAP HANA关于触发器的深入理解
查看>>