数据结构(集合)学习之Collection和Iterator
集合
1、集合与数组
数组(可以存储基本数据类型)是用来存现对象的一种容器,但是数组的长度固定,不适合在对象数量未知的情况下使用。
集合(只能存储对象,对象类型可以不一样)的长度可变,可在多数情况下使用。
数组和集合都是用来存储数据的容器。
区别:
1)从长度来讲:
数组:需要固定长度。
集合:长度可以改变,可以根据保存的数据进行扩容。
2)从存储内容上:
数组:可以存储基本类型数据,还可以存储引用类型的数据(比如:String和上述演示的Student类)。
集合:只能存储引用类型的数据,也就是说集合只能存储类的对象。
3)从存储类型上:
数组:只能存储相同类型的数据。
集合:可以存储不同类型的数据,集合中可以存储任意类型的引用数据类型。
2、Iterator
介绍:
public interface Iterator<E>
一个集合的迭代器。 Iterator代替了Java Collections Framework中的Enumeration 。 迭代器有两种不同的枚举方式:
迭代器允许调用者在迭代期间从底层集合中删除元素,并具有明确定义的语义。
方法名称得到改进。
此接口是Java Collections Framework的成员。

3、Collection
public interface Collection<E>extends Iterable<E>
集合层次结构中的根界面。 集合表示一组被称为其元素的对象。 一些集合允许重复元素,而其他集合不允许。 有些被命令和其他无序。 JDK不提供此接口的任何直接实现:它提供了更具体的子接口的实现,如Set和List 。 该界面通常用于传递集合,并在需要最大的通用性的情况下对其进行操作。
注意:
1、Collection(接口)没有具体实现类,且是集合的根接口。(类似对Java对象中的Object() );
2、Collection 继承了Iterable,而iterable接口里定义了返回iterator的方法,相当于对iterator的封装,同时实现了iterable接口的类可以支持for each循环。

4、Iterator和Collection的关系
Iterator是Collection的迭代器,Collection里面有方法:iterator()。作用:返回集合中元素的迭代器。
用法(以Collection的子类ArrayList为例):
public static void main(String[] args) {
ArrayList<String> list = new ArrayList<String>();
list.add("A");
list.add("B");
list.add("C");
list.add("D");
for (String value : list) {
System.out.print(value + ",");
}
System.out.println();// 隔开两次输出
Iterator it = list.iterator();
while (it.hasNext()) {// hasNext():指针从第一个元素之前开始判断后面是否还有值
if (it.next().equals("C")) {// it.next():获取到指针位置next的值
it.remove();
// 注意:remove()将会删除上次调用next()时返回的元素,也就是说先调用next()方法,再调用remove()方法才会删除元素。不然会报错:IllegalStateException
}
}
for (String value : list) {
System.out.print(value + ",");
}
}

迭代过程:

注意:当调用it.next()方法时成功,指针移向下一位,然后再返回刚开始判断的值,例如:

此时,"B"的it.next()是"C",然后指针往后移,并返回值"C",此时如果立马调用remove(),删除的也是"C":

数据结构(集合)学习之Collection和Iterator的更多相关文章
- 数据结构(集合)学习之Map(一)
集合 框架关系图: 补充:HashTable父类是Dictionary,不是AbstractMap. Map: Map(接口)和Collection都属于集合,但是Map不是Collection的子类 ...
- 数据结构(集合)学习之Set
集合 框架关系图: Collection接口下面有三个子接口:List.Set.Queue.此篇是关于Set<E>的简单学习总结. 补充:HashTable父类是Dictionary,不是 ...
- 数据结构(集合)学习之List
集合 框架关系图: Collection接口下面有三个子接口:List.Set.Queue.此篇是关于List<E>的简单学习总结. 补充:HashTable父类是Dictionary,不 ...
- 数据结构(集合)学习之Map(二)
集合 框架关系图 补充:HashTable父类是Dictionary,不是AbstractMap. 一:HashMap中的链循环: 一般来说HashMap中的链循环会发生在多线程操作时(虽然HashM ...
- 数据结构(集合)学习之Queue
集合 框架关系图: Collection接口下面有三个子接口:List.Set.Queue.此篇是关于Queue<E>的简单学习总结. 补充:HashTable父类是Dictionary, ...
- linkin大话数据结构--Collection和Iterator
linkin大话数据结构--Collection和Iterator Java 集合就像一种容器,可以把多个对象的引用放入容器中.Java 集合类可以用于存储数量不等的多个对象,还可用于保存具有映射关系 ...
- ------------------java collection 集合学习 ----小白学习笔记,,有错,请指出谢谢
<!doctype html>java对象集合学习记录 figure:first-child { margin-top: -20px; } #write ol, #write ul { p ...
- 牛客网Java刷题知识点之Java 集合框架的构成、集合框架中的迭代器Iterator、集合框架中的集合接口Collection(List和Set)、集合框架中的Map集合
不多说,直接上干货! 集合框架中包含了大量集合接口.这些接口的实现类和操作它们的算法. 集合容器因为内部的数据结构不同,有多种具体容器. 不断的向上抽取,就形成了集合框架. Map是一次添加一对元素. ...
- JAVASE(十四) 集合: 数组和集合、Collection、Iterator、List、Set、Map
个人博客网:https://wushaopei.github.io/ (你想要这里多有) 1.数组和集合 1.1 内存中对数据进行存储和管理的“容器”:数组,集合 1.2 数组存储的特点和缺点 ...
随机推荐
- DOCKER 学习笔记7 Docker Machine 在阿里云实例化ECS 以及本地Windows 实例化虚拟机实战
前言 通过以上6小节的学习,已经可以使用DOCKER 熟练的部署应用程序了.大家都可以发现使用 DOCKER 带来的方便之处,因为现在的话,只是在一台服务器上部署,这样部署,我们只需要一条命令,需要的 ...
- JavaScript运动_封装模板(支持链式运动、完美运动)
最近自学到了JS运动部分,自己整理了一些js模板,望采纳. 1.支持链式运动的模板: 先解释一下函数中的几个参数含义: 1)obj: 要操作的对象 2)target: 属性要到达的目标值 3)attr ...
- Magicodes.IE在Docker中使用
Magicodes.IE在Docker中使用 更新日志 2019.02.13 [Nuget]版本更新到2.0.2 [导入]修复单列导入的Bug,单元测试"OneColumnImporter_ ...
- 《Python学习手册 第五版》 -第7章 字符串基础
本章内容是关于字符串的,字符串是编程中经常遇到的问题,本章的内容不是包含所有字符串的讲解,而是针对其最基本的内容进行说明,后续的相关章节会根据需要进行扩展和说明,例如后续的第37章内容会讲解Unico ...
- python之面向对象01
1.面向过程编程最容易被初学者接受,其往往用一段长代码来实现指定功能,开发过程的思路是将数据与函数按照执行的逻辑顺序组织在一起,数据与函数分开考虑. 2.类与对象 (1)类是抽象的,是有相同属性和行为 ...
- 关于C++ 中 thread 的拷贝构造函数
起因来自于<C++并发编程实战>的这样一个例子 #include <thread> #include <iostream> #include <stdexce ...
- python基础之字符串基本功能
终于还是踏上了Python的不归路,不知道能不能走的完. 先总结一下今天学习的字符串的各个功能吧:只写了部分用的比较多的. 1.capitalize: 字符串首字母大写 >>> na ...
- Part1-解线性方程组
自己一边听课一边记得,参考网上广为流传的那本<MIT线性代数笔记>,转成Latex上传太麻烦,直接截图上传了,需要电子版的可以私信我.
- ansible hosts配置
编辑/etc/ansible/hosts 添加本机的public SSH key到目标机器的authorized_keys #ssh-copy-id 添加本机的私钥到Ansible 运行ansib ...
- CentOS 7的yum更换为国内的阿里云yum源
Yellow dog Updater(Yum)是CentOS所有版本的默认包管理器,yum主要功能是更方便的添加/删除/更新RPM包,自动解决包的依赖性问题,便于管理大量系统的更新问题,其理念是使用一 ...