这一章节我们来讨论一下接口Collection与Iterator。
1.在Collection与Map的实现类里面,其实都实现了Collection与Iterator接口。
package com.ray.ch09;
import java.util.ArrayList;
import java.util.Collection;
import java.util.HashSet;
import java.util.Iterator;
public class Test {
public static void showItems(Collection<Integer> collection) {
for (Integer item : collection) {
System.out.print(item + " ");
}
}
public static void showItems(Iterator<Integer> iterator) {
while (iterator.hasNext()) {
Integer item = iterator.next();
System.out.print(item + " ");
}
}
public static void main(String[] args) {
ArrayList<Integer> list = new ArrayList<Integer>();
HashSet<Integer> set = new HashSet<Integer>();
for (int i = 0; i < 10; i++) {
list.add(i);
set.add(i);
}
showItems(list);
System.out.println();
showItems(set);
System.out.println();
showItems(list.iterator());
System.out.println();
showItems(set.iterator());
System.out.println();
}
}
从上面的代码都可以看见,list和set都分别实现了Collection与Iterator,因此可以通过向上转型来调用里面的方法。
2.当我们有一个对象想复用类似showItem这种遍历方法的时候,他必须实现Collection或Iterator,而且实现Iterator比较容易。
Collection:
package com.ray.ch09;
import java.util.Collection;
import java.util.Iterator;
public class Test {
}
class Person implements Collection<Person> {
@Override
public int size() {
// TODO Auto-generated method stub
return 0;
}
@Override
public boolean isEmpty() {
// TODO Auto-generated method stub
return false;
}
@Override
public boolean contains(Object o) {
// TODO Auto-generated method stub
return false;
}
@Override
public Iterator<Person> iterator() {
// TODO Auto-generated method stub
return null;
}
@Override
public Object[] toArray() {
// TODO Auto-generated method stub
return null;
}
@Override
public <T> T[] toArray(T[] a) {
// TODO Auto-generated method stub
return null;
}
@Override
public boolean add(Person e) {
// TODO Auto-generated method stub
return false;
}
@Override
public boolean remove(Object o) {
// TODO Auto-generated method stub
return false;
}
@Override
public boolean containsAll(Collection<?> c) {
// TODO Auto-generated method stub
return false;
}
@Override
public boolean addAll(Collection<? extends Person> c) {
// TODO Auto-generated method stub
return false;
}
@Override
public boolean removeAll(Collection<?> c) {
// TODO Auto-generated method stub
return false;
}
@Override
public boolean retainAll(Collection<?> c) {
// TODO Auto-generated method stub
return false;
}
@Override
public void clear() {
// TODO Auto-generated method stub
}
}
上面的实例代码我们可以看见,实现起来是非常麻烦的一件事情,达不到代码重用所应有的提供开发效率的效果。
我们知道有一个AbstractCollection实现了上面的接口,我们来继承它看看。
package com.ray.ch09;
import java.util.AbstractCollection;
import java.util.Collection;
import java.util.Iterator;
public class Test {
public static void showItems(Collection<Person> collection) {
for (Person person : collection) {
System.out.print(person.getId() + " ");
}
}
public static void showItems(Iterator<Person> iterator) {
while (iterator.hasNext()) {
Person person = iterator.next();
System.out.print(person.getId() + " ");
}
}
public static void main(String[] args) {
PersonList personList = new PersonList();
showItems(personList);
System.out.println();
showItems(personList.iterator());
}
}
class Person {
private int id = 0;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
}
class PersonList extends AbstractCollection<Person> {
private Person[] persons = new Person[10];
public PersonList() {
for (int i = 0; i < persons.length; i++) {
Person person = new Person();
person.setId(i);
persons[i] = person;
}
}
@Override
public Iterator<Person> iterator() {
return new Iterator<Person>() {
private int index = 0;
@Override
public boolean hasNext() {
return index < persons.length;
}
@Override
public Person next() {
return persons[index++];
}
@Override
public void remove() {// 以后会展开实现
}
};
}
@Override
public int size() {
return persons.length;
}
}
相对来说我们展现的例子就简单了一些,但是需要注意,继承了这个抽象类其实里面有很多方法是需要自己实现,只不过他里面没有给出来而已,就像我们的例子,必须自己初始化person的数组,不能使用外部add,因为在抽象类里面的实现,add是抛异常的。
Iterator:
相对来说Iterator就简单优雅多了。
package com.ray.ch09;
import java.util.Iterator;
public class Test {
public static void showItems(Iterator<Person> iterator) {
while (iterator.hasNext()) {
Person person = iterator.next();
System.out.print(person.getId() + " ");
}
}
public static void main(String[] args) {
PersonList personList = new PersonList();
showItems(personList.iterator());
}
}
class Person {
private int id = 0;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
}
class PersonList {
private Person[] persons = new Person[10];
public PersonList() {
for (int i = 0; i < persons.length; i++) {
Person person = new Person();
person.setId(i);
persons[i] = person;
}
}
public Iterator<Person> iterator() {
return new Iterator<Person>() {
private int index = 0;
@Override
public boolean hasNext() {
return index < persons.length;
}
@Override
public Person next() {
return persons[index++];
}
@Override
public void remove() {// 以后会展开实现
}
};
}
}
相对来说,代码减少了不少。
总结:我们这一章节简单讨论了接口Collection与Iterator,以及一些实现和复用的例子。
这一章节就到这里,谢谢。
-----------------------------------
目录
分享到:
相关推荐
postman-windows-9.12.2
API 调用工具 Postman-9.12.2-中文版 Postman-9.12.2-中文版 Postman-9.12.2-中文版 Postman-9.12.2-中文版 Postman-9.12.2-中文版 Postman-9.12.2-中文版 Postman-中文版 API 调用工具
这个名为"Postman-win64-9.12.2.zip"的压缩包文件,是Postman针对Windows 64位系统的版本,版本号为9.12.2。在解压并安装后,它将提供一个强大的接口测试环境,帮助开发者有效地测试和调试HTTP请求。 首先,让我们...
Postman是一款强大且流行的API测试工具。这款工具在开发和调试网络程序时,用于跟踪网页请求和模拟用户发起的各类HTTP请求
《jQuery-File-Upload-9.12.1:便捷高效文件上传插件解析》 在Web开发领域,用户交互的丰富性和效率是提升用户体验的关键因素之一,而文件上传功能正是其中不可或缺的一部分。jQuery-File-Upload是一款广受欢迎的...
这个"Postman-win64-9.12.2安装包.zip"是为Windows 64位系统提供的版本,版本号为9.12.2。通过解压缩此文件,用户将获得一个名为"Postman-win64-9.12.2.exe"的可执行文件,这是Postman的安装程序。 1. **Postman...
网络安全技术-9.12-交换机密码恢复 交换机安全配置 为何引入STP及STP介绍.mp3
官方离线安装包,测试可用。使用rpm -ivh [rpm完整包名] 进行安装
官方离线安装包,测试可用。使用rpm -ivh [rpm完整包名] 进行安装
Postman是一款非常流行的API开发、测试和文档工具,它极大地简化了与Web服务交互的过程。版本号9.12.2指示这是Postman的某个特定更新版本。 描述中的信息同样简洁,"Postman-win64-9.12.2-Setup.zip",意味着这个...
使用说明: 将app文件夹复制到以下目录: C:\Users\Administrator\AppData\Local\Postman\app-9.12.2\resources 注:Administrator为windows系统用户名,改成对应你的用户名。
Postman是一款广受欢迎的API开发和测试工具,尤其在软件开发过程中,它为开发者提供了方便的接口调试和文档管理功能。9.12.2版本是Postman的一个更新,带来了更多的特性和改进。 1. **Postman安装与运行**: - `...
Postman是一款广受欢迎的API开发、测试和文档化工具,尤其在软件开发过程中,它扮演着接口测试的重要角色。9.12.2版本的发布带来了更多改进和新特性,以提升用户的工作效率和测试体验。 Postman的核心功能主要包括...
jira
Postman_win64-9.12.2安装包;是exe文件,直接下载安装即可。给自己也留个底,有需要的大家可以下载吧,做API测试相当有用
NVIDIA PhysX物理加速驱动,支持显卡型号包括: GeForce400系列、300系列、200系列、100系列、9系列与8系列GPU(内核至少为32核、并且搭载至少256MB 显存)、AGEIA PhysX处理器(所有型号 )
spire.pdf.free for java
官方离线安装包,测试可用。使用rpm -ivh [rpm完整包名] 进行安装
官方离线安装包,测试可用。使用rpm -ivh [rpm完整包名] 进行安装
官方离线安装包,测试可用。使用rpm -ivh [rpm完整包名] 进行安装