JavaSE Collections类 , Iterator迭代器 , 增强for循环
Collections
它是集合的工具类,为集合体系扩展了一些其他的方法。类中都是静态的方法,可以使用类名直接调用。
可变参数
在JDK1.5之后,如果我们定义一个方法需要接受多个参数,并且多个参数类型一致,我们可以对其简化成如下格式:
修饰符 返回值类型 方法名(参数类型... 形参名){ }
其实这个书写完全等价与
修饰符 返回值类型 方法名(参数类型[] 形参名){ }
只是后面这种定义,在调用时必须传递数组,而前者可以直接传递数据即可。
JDK1.5以后。出现了简化操作。... 用在参数上,称之为可变参数。
同样是代表数组,但是在调用这个带有可变参数的方法时,不用创建数组(这就是简单之处),直接将数组中的元素作为实际参数进行传递,其实编译成的class文件,将这些元素先封装到一个数组中,在进行传递。这些动作都在编译.class文件时,自动完成了
常用功能
public static <T> boolean addAll(Collection<T> c, T... elements)
:往集合中添加一些元素。public static void shuffle(List<?> list) 打乱顺序
:打乱集合顺序。public static <T> void sort(List<T> list)
:将集合中元素按照默认规则排序。public static <T> void sort( List<T> list,Comparator<? super T> )
:将集合中元素按照指定规则排序。
1 public class CollectionsDemo { 2 public static void main(String[] args) { 3 ArrayList<Integer> list = new ArrayList<Integer>(); 4 //原来写法 5 //list.add(12); 6 //list.add(14); 7 //list.add(15); 8 //list.add(1000); 9 //采用工具类 完成 往集合中添加元素 10 Collections.addAll(list, 5, 222, 1,2); 11 System.out.println(list); 12 //排序方法 13 Collections.sort(list); 14 System.out.println(list); 15 } 16 } 17 结果: 18 [5, 222, 1, 2] 19 [1, 2, 5, 222]
代码演示之后 ,发现我们的集合按照自然顺序进行了排列,那么它是怎么完成排序的功能的呢?
在JAVA中提供了两种大小比较实现的方式:
一种是比较死板的,按照对象的自然顺序进行比较的方式,采用java.lang.Comparable
接口去实现。
一种是灵活的,可以根据需求,规定对象的排序方式,采用java.util.Comparator
接口完成。
以上两种比较器第一篇文章有讲到...
Iterator迭代器
在程序开发中,经常需要遍历集合中的所有元素。由于集合框架中的集合容器太多,而每个集合容器中保存的数据存储的方式都不一样。于是导致我们取出数据的方式也完全不相同。
Java针对所有集合容器进行共性取出方式的抽取,于是针对所有的集合定义了一个接口,在这个接口中描述了所有集合容器的共性遍历规则。java.util.Iterator
Iterator
接口也是Java集合中的一员,但它与Collection
、Map
接口有所不同:
Collection
接口与Map
接口主要用于存储元素
Iterator
主要用于迭代访问Collection
中的元素,因此Iterator
对象也被称为迭代器。
想要遍历Collection集合,那么就要获取该集合迭代器完成迭代操作,下面介绍一下获取迭代器的方法:
public Iterator iterator()
: 获取集合对应的迭代器,用来遍历集合中的元素的。
下面介绍一下迭代的概念:
迭代:即Collection集合元素的通用获取方式。在取元素之前先要判断集合中有没有元素,如果有,就把这个元素取出来,然后继续在判断,如果还有就再取出来。一直把集合中的所有元素全部取出。这种取出方式专业术语称为迭代。
Iterator接口的常用方法如下:
public boolean hasNext()
: 如果仍有元素可以迭代,则返回 true。public E next()
: 返回迭代的下一个元素。
1 public class IteratorDemo { 2 public static void main(String[] args) { 3 // 使用多态方式 创建对象 4 Collection<String> coll = new ArrayList<String>(); 5 6 // 添加元素到集合 7 coll.add("串串星人"); 8 coll.add("吐槽星人"); 9 coll.add("汪星人"); 10 //遍历 11 //使用迭代器 遍历 每个集合对象都有自己的迭代器 12 Iterator<String> it = coll.iterator(); 13 // 泛型指的是 迭代出 元素的数据类型 14 while(it.hasNext()){ //判断是否有迭代元素 15 String s = it.next();//获取迭代出的元素 16 System.out.println(s); 17 } 18 } 19 }
迭代器的实现原理
我们在之前案例已经完成了Iterator遍历集合的整个过程。当遍历集合时,首先通过调用集合的iterator()方法获得迭代器对象,然后使用hashNext()方法判断集合中是否存在下一个元素,如果存在,则调用next()方法将元素取出,否则说明已到达了集合末尾,停止遍历元素。
Iterator迭代器对象在遍历集合时,内部采用指针的方式来跟踪集合中的元素,为了让初学者能更好地理解迭代器的工作原理,接下来通过一个图例来演示Iterator对象迭代元素的过程:
在调用Iterator的next方法之前,迭代器的索引位于第一个元素之前,不指向任何元素,当第一次调用迭代器的next方法后,迭代器的索引会向后移动一位,指向第一个元素并将该元素返回,当再次调用next方法时,迭代器的索引会指向第二个元素并将该元素返回,依此类推,直到hasNext方法返回false,表示到达了集合的末尾,终止对元素的遍历。
1 import java.util.ArrayList; 2 import java.util.Collection; 3 import java.util.Iterator; 4 5 public class Demo { 6 public static void main(String[] args) { 7 // 创建集合对象 8 Collection<String> coll = new ArrayList<>(); 9 // 给集合容器中添加元素 10 coll.add("abc"); 11 coll.add("bcd"); 12 coll.add("cde"); 13 coll.add("def"); 14 coll.add("abc"); 15 16 // 遍历集合 ,遇到"abc"就删除 17 Iterator<String> it = coll.iterator(); 18 while( it.hasNext() ) { 19 // 取出数据 20 String next = it.next(); 21 // 判断取出的数据是否为abc 22 if( next.equals("abc") ) { 23 /* 24 当我们在使用迭代器对集合中的元素进行迭代时,不允许使用集合中自带的 25 增删方法对集合中的元素进行操作。因为集合基于iterator获取一个迭代器 26 此时这个迭代器是针对集合中的元素而获取的,如果此时用集合自身的方法进行 27 增删擦操作那么集合中的元素就会发生变化。 28 导致在获取迭代器之前和正在迭代的元素不一样,所以不允许这么干。 29 */ 30 // coll.remove(next); // 报错 31 32 // 在使用迭代器遍历集合时,只能使用迭代器中的方法删除集合中的数据 33 it.remove(); 34 } 35 } 36 // 打印集合 37 System.out.println("coll = " + coll); 38 39 } 40 }
注意
使用迭代器对集合进行迭代的时候,不要使用集合自身的功能对集合进行增删操作。
所有的迭代器当迭代结束之后,那么这个迭代器就位于集合的最后。无法再进行迭代,所以一般针对于集合的迭代使用for循环。
使用迭代器迭代集合的时候,每一个hasNext方法都对应一个next,不要一个hasNext方法对应多个next。
增强for循环
增强for循环 (也称foreach循环) 是JDK1.5增加的一个高级for循环,专门用来遍历数组和集合的。它的内部原理其实是个Iterator迭代器,所以在遍历的过程中,不能对集合中的元素进行增删操作。
格式:
1 for( 元素的数据类型 变量 : Collection集合or数组 ){ 2 //写操作代码 3 }
它用于遍历Collection和数组。通常只进行遍历元素,不要在遍历的过程中对集合元素进行增删操作。
遍历数组
1 public class NBForDemo1 { 2 public static void main(String[] args) { 3 int[] arr = {3,5,6,87}; 4 //使用增强for遍历数组 5 for(int a : arr){//a代表数组中的每个元素 6 System.out.println(a); 7 } 8 } 9 }
遍历集合
1 public class NBFor { 2 public static void main(String[] args) { 3 Collection<String> coll = new ArrayList<String>(); 4 coll.add("小河神"); 5 coll.add("老河神"); 6 coll.add("神婆"); 7 //使用增强for遍历 8 for( String s :coll ){//接收变量s代表 代表被遍历到的集合元素 9 System.out.println(s); 10 } 11 } 12 }
转载于:https://www.cnblogs.com/ownmg/p/10707354.html
JavaSE Collections类 , Iterator迭代器 , 增强for循环相关推荐
- 【小白学Java】D20》》》Iterator迭代器 增强for循环
[友情链接]---–->Java中的各种集合大汇总,学习整理 [友情链接]----–> Collection集合 [友情链接]----–> ArrayList集合及其常用功能 [友情 ...
- 2021-06-19复习java Collection集合 Iterator接口_迭代器 增强for循环 泛型
2021-06-19复习java Collection集合 Iterator接口_迭代器 增强for循环 泛型 Collection集合 java.util.coLlection接口 所有单列集合的最 ...
- 进阶04 4 Collection集合类+Iterator迭代器+增强for+泛型
文章目录 Collection集合 集合概述 java.util.Collection接口 Iterator迭代器 Iterator接口 Iterator接口的常用方法 说明 迭代器实现原理图: 增强 ...
- 【java笔记】Iterator迭代器 增强for
Iterator接口: 接口java.util.Iterator遍历集合中的所有元素.Iterator对象主要用于遍历Collection中的元素,因此Iterator对象也被称为迭代器 迭代: Co ...
- Iterator迭代器与foreach循环
Iterator迭代器 1. Iterator介绍 在程序的开发中,经常需要遍历集合中所有的元素.针对这种需求,JDK专门提供了一个接口java.util.Iterator.Iterator接口也是j ...
- 【Java 集合】ArrayList、LinkedList、Stack、Queue、Set、Map, 迭代器 Iterable、Iterator,Collections类
集合类型 数组的局限性 ArrayList(常用方法 + 基本使用) ArrayList - retainAll ArrayList - toArray ArrayList 的遍历(5种) Array ...
- Java基础加强重温_05:Iterator迭代器、增强for循环、集合综合案例-斗地主、数据结构(栈、队列、数组、链表、红黑树)、List接口、Set接口
摘要: Java基础加强重温_05: Iterator迭代器(指针跟踪元素). 增强for循环(格式.底层). 集合综合案例-斗地主(代码规范抽取代码,集合元素打乱). 数据结构[栈(先进后出,子弹夹 ...
- java基础-迭代器(Iterator)与增强for循环
java基础-迭代器(Iterator)与增强for循环 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.Iterator迭代器概述 Java中提供了很多个集合,它们在存储元素时 ...
- 迭代器 Iterator 增强for循环
目录 1. Iterator接口 2.迭代器的使用步骤(重点): 3.迭代器的实现原理 3.增强for循环 1. Iterator接口 在程序开发中,经常需要遍历集合中的所有元素.针对这种需求,JDK ...
最新文章
- C语言中的输入输出函数
- ulimit调优|设置普通用户的ulimit值
- 【五校联考3day2】B
- 放弃相爱,并不放弃彼此
- 详解JavaScript中void语句的使用
- PostGreSql学习笔记002---Navicat Premium中管理PostGreSql 错误:字段rolcatupdate 不存在
- sqoop 命令在crontab 不能自定执行
- Git 远程操作 —— clone、push、pull、fetch
- 黑马程序员JUC并发教程笔记(一)
- Mockito 实战总结笔记
- linux 开山(尚硅谷)--听课笔记-
- Android 外网远程连接真机进行开发调试
- 不同颜色蔬菜代表什么营养?
- 最新常用数据库排名及分类介绍
- 巧用Hosts文件 杀掉麻烦的IE浏览器弹出窗口
- ch2_8_2求解幸运数问题
- Python机器学习-数据预处理(二)
- android inactive InputConnection
- 公共艺术与计算机论文题目,优秀公共艺术论文选题 公共艺术论文题目如何定...
- IntelliJ IDEA 注册码(phpstorm等IDE)
热门文章
- mysql 临时表 中文_MySQL 临时表
- linux硬链接符号,Linux — 硬链接与符号链接
- artcam2008 stp 教程_ArtCAM_中文版使用教程
- r语言中的while循环_R编程中的While循环
- xcode11 新功能_Xcode 11功能
- df 命令查看磁盘空间_Linux df命令检查磁盘空间
- Python字符串join()方法
- iOS UISearchController和UITableView
- C++基础知识(八)例外、异常处理
- C++基础教程之C++数据抽象