本文主要介绍Collection和Iterator接口。
一、Collection和Iterator接口
Collection接口是List、Set、、Queue的父接口。
Collection c = new ArrayList();
父类指向子类对象!优点:多态、动态链接、向上转型。
面向接口编程,被调用者对于调用者是完全透明的,可以随意替换子类,屏蔽了子类特有的东西。
Demo:详细请参加:Java API文档
二、如何依次遍历集合中的元素?
普通情况下,当我们把一个对象“丢进”集合后,集合会忘记改对象的数据类型,而默认为Object。 JDK1.5后,可以通过“泛型”限制并记住集合中元素的类型。
- Iterator迭代器
- 仅用于遍历集合
- 提供统一的访问接口
- 区别:Iterator用于访问对象,Collecton用于盛放对象
public class TestIterator {
public static void main(String[] args) {
Collection books = new HashSet();
books.add("englishbook");
books.add("computerbook");
books.add("musicbook");
Iterator booksIterator = books.iterator();
while (booksIterator.hasNext()) {
String book = (String) booksIterator.next();
System.out.println("book:"+book);
if (book.equals("computerbook")) {
booksIterator.remove();
// 下面代码引发异常:ConcurrentModificationException
books.remove(book);
}
book="just a test!";
}
System.out.println(books);
}
}
输出结果:
- foreach,用法简洁
public class TestForEach {
public static void main(String[] args) {
Collection books = new HashSet();
books.add("englishbook");
books.add("computerbook");
books.add("musicbook");
Iterator booksIterator = books.iterator();
for (Object object : books) {
String book = (String)object;
System.out.println("book:" + book);
if (book.equals("computerbook")) {
// books.remove(book);
book = "just a test!";
}
}
System.out.println(books);
}
}
输出结果:
三、比较两种遍历方式:
相同点:循环中的迭代访问集合元素时,系统只是把集合元素的值赋值给迭代变量。而集合本身不变
区别:
1.foreach更简洁
2.Iterator功能强大,在循环过程中可以对访问到的元素进行操作