Collection类,迭代器,增强for循环

Collection集合

集合概述

​ 前面学习过ArrayList集合,那么集合到底是一个什么呢?

集合:集合是Java中提供的一种容器,可以用来存储多个数据

集合与数组的区别

集合和数组都是容器,它们有什么区别?

  • 数组的长度是固定的,集合的长度是可变的
  • 数组中存储的是同一种数据类型的元素,可以存储基本数据类型也可以存储引用数据类型,集合存储的都是对象,而且对象的数据类型可以不一致。在开发当中一般当对象多的时候,使用集合来存储对象。
集合的框架

​ JavaSE它提供了满足各种需求的API,我们在使用API的时候,先了解其继承与接口操作的框架,才能了解何时使用哪个类,以及类与类之间如何彼此合作,从而达到灵活的应用。

​ 集合根据存储结构,把它分为两大类:分别是单列集合:java.util.Collection和双列集合java.util.Map

Collection接口:
  1. 没有带索引的方法

Collection:是单列集合的根接口,用于存储一系列符合某种规则的元素,它有两种重要的子接口,分别是java.util.Listjava.util.Set

单列集合

Vector集合,ArrayList集合,LinkedList集合,TreeSet集合,HashSet集合,LinkedHashSet集合。

List集合特点:
  1. 有序的集合(存储和取出元素的顺序相同)
  2. 允许存储重复的元素
  3. 有索引,可以使用普通的for循环遍历

继承:子类共性抽取,形成父类(接口)

Set集合特点
  1. 不允许存储重复的元素
  2. 没有索引(不能使用普通的for循环)
  3. TreeSet集合,HashSet集合为无序的集合,LinkedHashSet集合为有序的集合

List接口的主要实现类有ArrayList集合LinkedList集合Set接口的主要实现类有HashSet集合TreeSet集合

学习集合的目标
  1. 会使用集合存储数据
  2. 能够遍历集合,把元素从集合当中取出来
  3. 掌握每种集合的独特性
集合框架体系的学习方式:
  1. 学习集合框架的顶层:掌握接口或者抽象类当中的共性的方法,所有的子类都可以使用
  2. 使用底层的集合框架:顶层不是接口就是抽象类,需要使用底层的子类创建对象来使用集合
Collection集合常用功能

​ Collection集合是所有的单列集合的父类接口,定义的是所有的单列集合中的共性的API方法,所有的单列集合都可以使用共性的方法。增删改查功能,crud操作

1.把给定的对象添加到当前的集合当中:

  • public boolean add(E e);
    

2.清空集合当中的所有的元素,不删除集合,集合还存在

  • public void clear();
    

3.把给定的对象从当前集合当中删除掉

  • public boolean remove(E e)
    

4.判断当前集合当中是否包含给定的对象

  • public boolean contains(E e)
    

5.判断当前集合是否为空。

  • public boolean isEmpty()
    

6.获取当前集合元素的个数

  • public int size()
    

7.把当前集合中元素,存储到一个数组当中

  • public Object[] toArray()
    

迭代器(iterator)

​ 在程序开发当中,经常需要遍历集合当中的所有元素,针对这种情况,JDK官方有提供了一个接口java.util.Iterator。iterator接口也是集合当中的一员,但是他与Map,Collection接口不同,Collection和Map接口它主要是用来存储元素的,而iterator主要是用来迭代访问Collection与Map接口当中的元素。因此我们也经常把iterator对象称为迭代器

​ 想要遍历Collection集合当中的元素,首先需要获取该集合的迭代器,通过迭代器完成迭代操作

迭代的概念

迭代:从Collection集合元素的通用获取方式。具体实现:在每次取元素之前首先判断集合当中有没有元素,如果有,就把这个元素取出来,继续再判断,如果还有就再一次取出来,一直把集合当中的所有元素全部取出来。我们把这种取出方式再专业术语上称为迭代。

iterator接口的常用API方法:

1.获取迭代的下一个元素

  • public E next()
    

2.集合中是否还有元素,如果集合当中仍有元素可以迭代,则返回true,没有元素,则返回false

  • public boolean hasNext()
    
获取迭代器的方法

public Iterator iterator() :获取集合对应的迭代器,用来遍历集合当中的元素。

​ iterator是一个接口无法直接使用,需要借助于实现类对象,获取实现类对象的方式比较特殊Collection接口当中有一个API方法。iterator()这个方法的返回值就是一个iterator实现类的对象

  • Iterator<E> iterator()
    
迭代器使用步骤
  1. 通过集合的iterator()方法获取此集合元素的迭代器实现类对象,使用Iterator接口进行接收(多态)
  2. 使用Iterator接口定义的方法hasNext()判断集合当中还有没有下一个元素
  3. 使用Iterator接口当中的方法next()获取集合当中的下一个元素
迭代器的实现原理

​ 在调用iterator接口当中的next()方法之前,迭代器的索引位于第一个元素之前,不指向任何元素,当第一次调用迭代器的next方法后,迭代器的索引会向后移动一位,指向第一个元素并将该元素返回。当再次调用next方法时,迭代器的索引会指向第二个元素并将该元素返回,以此类推,直到hasNext方法返回false时,表示迭代器达到了集合的末尾,终止对元素的遍历。如果强硬的再取集合的元素,此时程序就会抛出 没有元素异常: java.util.NoSuchElementException

​ 备注:iterator接口也是有泛型的,迭代器的泛型是跟着集合走的,集合当中定义什么类型,迭代器就是什么类型。
在这里插入图片描述

增强for循环

​ 在JDK1.5之后出现类一个新的循环结构,for each 循环,一般也称为增强for循环,专门用来遍历数组和集合的。它的内部原理其实是有个迭代器iterator,在迭代过程中,不能对集合当中的元素进行增删操作。

格式:

for (元素的数据类型 变量名 : Collection集合或者数组){
    //操作代码
    //......
}

主要用于遍历Collection集合或者数组。在遍历过程中,一定不要进行增删操作。

练习1:遍历数组

int[] arr = {3,5,7,9,12};
for (int i : arr){
    System.out.println(i);
}

练习2:遍历集合

//Collection coll = new ArrayList<>();
//姚明 科比 乔丹 /詹姆斯 加索尔 库里
Collection<String> coll = new ArrayList<>();
coll.add("姚明");
coll.add("科比");
coll.add("乔丹");
for (String str : coll) {
    System.out.println(str);
}

备注:目标只能是Collection集合或者是数组,增强for循环仅仅是作为遍历操作出现。简化迭代器的操作

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值