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集合中的一员,但它与CollectionMap接口有所不同:

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 }

注意

  1. 使用迭代器对集合进行迭代的时候,不要使用集合自身的功能对集合进行增删操作。

  2. 所有的迭代器当迭代结束之后,那么这个迭代器就位于集合的最后。无法再进行迭代,所以一般针对于集合的迭代使用for循环。

  3. 使用迭代器迭代集合的时候,每一个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循环相关推荐

  1. 【小白学Java】D20》》》Iterator迭代器 增强for循环

    [友情链接]---–->Java中的各种集合大汇总,学习整理 [友情链接]----–> Collection集合 [友情链接]----–> ArrayList集合及其常用功能 [友情 ...

  2. 2021-06-19复习java Collection集合 Iterator接口_迭代器 增强for循环 泛型

    2021-06-19复习java Collection集合 Iterator接口_迭代器 增强for循环 泛型 Collection集合 java.util.coLlection接口 所有单列集合的最 ...

  3. 进阶04 4 Collection集合类+Iterator迭代器+增强for+泛型

    文章目录 Collection集合 集合概述 java.util.Collection接口 Iterator迭代器 Iterator接口 Iterator接口的常用方法 说明 迭代器实现原理图: 增强 ...

  4. 【java笔记】Iterator迭代器 增强for

    Iterator接口: 接口java.util.Iterator遍历集合中的所有元素.Iterator对象主要用于遍历Collection中的元素,因此Iterator对象也被称为迭代器 迭代: Co ...

  5. Iterator迭代器与foreach循环

    Iterator迭代器 1. Iterator介绍 在程序的开发中,经常需要遍历集合中所有的元素.针对这种需求,JDK专门提供了一个接口java.util.Iterator.Iterator接口也是j ...

  6. 【Java 集合】ArrayList、LinkedList、Stack、Queue、Set、Map, 迭代器 Iterable、Iterator,Collections类

    集合类型 数组的局限性 ArrayList(常用方法 + 基本使用) ArrayList - retainAll ArrayList - toArray ArrayList 的遍历(5种) Array ...

  7. Java基础加强重温_05:Iterator迭代器、增强for循环、集合综合案例-斗地主、数据结构(栈、队列、数组、链表、红黑树)、List接口、Set接口

    摘要: Java基础加强重温_05: Iterator迭代器(指针跟踪元素). 增强for循环(格式.底层). 集合综合案例-斗地主(代码规范抽取代码,集合元素打乱). 数据结构[栈(先进后出,子弹夹 ...

  8. java基础-迭代器(Iterator)与增强for循环

    java基础-迭代器(Iterator)与增强for循环 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.Iterator迭代器概述 Java中提供了很多个集合,它们在存储元素时 ...

  9. 迭代器 Iterator 增强for循环

    目录 1. Iterator接口 2.迭代器的使用步骤(重点): 3.迭代器的实现原理 3.增强for循环 1. Iterator接口 在程序开发中,经常需要遍历集合中的所有元素.针对这种需求,JDK ...

最新文章

  1. C语言中的输入输出函数
  2. ulimit调优|设置普通用户的ulimit值
  3. 【五校联考3day2】B
  4. 放弃相爱,并不放弃彼此
  5. 详解JavaScript中void语句的使用
  6. PostGreSql学习笔记002---Navicat Premium中管理PostGreSql 错误:字段rolcatupdate 不存在
  7. sqoop 命令在crontab 不能自定执行
  8. Git 远程操作 —— clone、push、pull、fetch
  9. 黑马程序员JUC并发教程笔记(一)
  10. Mockito 实战总结笔记
  11. linux 开山(尚硅谷)--听课笔记-
  12. Android 外网远程连接真机进行开发调试
  13. 不同颜色蔬菜代表什么营养?
  14. 最新常用数据库排名及分类介绍
  15. 巧用Hosts文件 杀掉麻烦的IE浏览器弹出窗口
  16. ch2_8_2求解幸运数问题
  17. Python机器学习-数据预处理(二)
  18. android inactive InputConnection
  19. 公共艺术与计算机论文题目,优秀公共艺术论文选题 公共艺术论文题目如何定...
  20. IntelliJ IDEA 注册码(phpstorm等IDE)

热门文章

  1. mysql 临时表 中文_MySQL 临时表
  2. linux硬链接符号,Linux — 硬链接与符号链接
  3. artcam2008 stp 教程_ArtCAM_中文版使用教程
  4. r语言中的while循环_R编程中的While循环
  5. xcode11 新功能_Xcode 11功能
  6. df 命令查看磁盘空间_Linux df命令检查磁盘空间
  7. Python字符串join()方法
  8. iOS UISearchController和UITableView
  9. C++基础知识(八)例外、异常处理
  10. C++基础教程之C++数据抽象