List常用方法及3种常用遍历方式
来源:互联网 发布:chainer pytorch 知乎 编辑:程序博客网 时间:2024/06/05 16:37
集合类的通用遍历方式, 用迭代器迭代:Iterator it = list.iterator();while(it.hasNext()) {Object obj = it.next();}public class ArrayListDemo {public static void main(String[] args) {ArrayList<String> list = new ArrayList<String>();System.out.println("----------add-----------");list.add("图书一");list.add("图书二");list.add("图书三");//for循环遍历for (int i = 0; i < list.size(); i++) {String str = list.get(i);System.out.println(str);}System.out.println("-----------------update-----------");list.set(0, "金瓶梅");//iterator迭代器遍历Iterator<String> it = list.iterator();while(it.hasNext()){String str = it.next();System.out.println(str);}System.out.println("-------------delete-------------------");list.remove(1);//foreach循环for (Object o : list) {System.out.println(list);}}}数据元素是怎样在内存中存放的?主要有2种存储方式:1、顺序存储,Random Access(Direct Access):这种方式,相邻的数据元素存放于相邻的内存地址中,整块内存地址是连续的。可以根据元素的位置直接计算出内存地址,直接进行读取。读取一个特定位置元素的平均时间复杂度为O(1)。正常来说,只有基于数组实现的集合,才有这种特性。Java中以ArrayList为代表。2、链式存储,Sequential Access:这种方式,每一个数据元素,在内存中都不要求处于相邻的位置,每个数据元素包含它下一个元素的内存地址。不可以根据元素的位置直接计算出内存地址,只能按顺序读取元素。读取一个特定位置元素的平均时间复杂度为O(n)。主要以链表为代表。Java中以LinkedList为代表。每个遍历方法的实现原理是什么?1、传统的for循环遍历,基于计数器的:遍历者自己在集合外部维护一个计数器,然后依次读取每一个位置的元素,当读取到最后一个元素后,停止。主要就是需要按元素的位置来读取元素。2、迭代器遍历,Iterator:每一个具体实现的数据集合,一般都需要提供相应的Iterator。相比于传统for循环,Iterator取缔了显式的遍历计数器。所以基于顺序存储集合的Iterator可以直接按位置访问数据。而基于链式存储集合的Iterator,正常的实现,都是需要保存当前遍历的位置。然后根据当前位置来向前或者向后移动指针。3、foreach循环遍历:根据反编译的字节码可以发现,foreach内部也是采用了Iterator的方式实现,只不过Java编译器帮我们生成了这些代码。各遍历方式的适用于什么场合?1、传统的for循环遍历,基于计数器的:顺序存储:读取性能比较高。适用于遍历顺序存储集合。链式存储:时间复杂度太大,不适用于遍历链式存储的集合。2、迭代器遍历,Iterator:顺序存储:如果不是太在意时间,推荐选择此方式,毕竟代码更加简洁,也防止了Off-By-One的问题。链式存储:意义就重大了,平均时间复杂度降为O(n),还是挺诱人的,所以推荐此种遍历方式。3、foreach循环遍历:foreach只是让代码更加简洁了,但是他有一些缺点,就是遍历过程中不能操作数据集合(删除等),所以有些场合不使用。而且它本身就是基于Iterator实现的,但是由于类型转换的问题,所以会比直接使用Iterator慢一点,但是还好,时间复杂度都是一样的。所以怎么选择,参考上面两种方式,做一个折中的选择。
阅读全文
1 0
- List常用方法及3种常用遍历方式
- set常用方法及遍历方式
- List、Map常用遍历方法
- 集合之 Collection-List->ArrayList三种遍历方式 常用方法
- 遍历List和Set集合的常用方法
- 遍历HashMap的常用两种方式
- jquery常用的几种遍历方式
- HashMap的遍历两种常用的方法,那就是使用keyset及entryset来进行遍历
- HashMap的遍历两种常用的方法,那就是使用keyset及entryset来进行遍历
- HashMap的遍历两种常用的方法,那就是使用keyset及entryset来进行遍历
- HashMap的遍历两种常用的方法,那就是使用keyset及entryset来进行遍历
- HashMap的遍历两种常用的方法,那就是使用keyset及entryset来进行遍历 .
- HashMap的遍历两种常用的方法,那就是使用keyset及entryset来进行遍历
- HashMap的遍历两种常用的方法,那就是使用keyset及entryset来进行遍历
- jsp循环遍历后台List结果的三种常用方法
- jsp循环遍历后台List结果的三种常用方法
- jsp循环遍历后台List结果的三种常用方法
- Map遍历常用方法
- G
- WordPress中了木马,怎么办?
- WEB浏览器与UHF超高频读卡器
- Uva 550 Multiplying by Rotation(模拟乘法)
- C标准库之三:errno.h
- List常用方法及3种常用遍历方式
- Spring xml配置文件头解析
- 1.3 Android中的几种UI排布方法介绍
- Android插件化开发技术
- 数据库索引实现原理
- Mycat分布式事务的实现
- 如何自定义JSTL标签与SpringMVC 标签的属性中套JSTL标签报错的解决方法
- dp基础8-- O
- android开发板实现关机功能