一. Collection使用
Collection接口是List, Set和Queue接口的父接口,该接口的定义的方法既可以用于操作Set集合,也可以用于操作List和Queue集合.
import java.util.Collection;
import java.util.ArrayList;
import java.util.HashSet;
public class CollectionTest
{
public static void main(String[] args)
{
Collection c=new ArrayList();
//添加元素
c.add("孙悟空");
//虽然集合里不能放基本的类型值(只能放引用类型),但Java支持自动装箱
c.add(6);
System.out.println("c的集合的元素个数为:"+c.size());
//删除指定的元素
c.remove(6);
System.out.println("c集合的元素个数为:"+c.size());
//判断是否包含指定字符串
System.out.println("c集合是否包含\"孙悟空\"字符串:"+c.contains("孙悟空"));
c.add("轻量级Java EE企业应用实战");
System.out.println("c集合的元素:"+c);
Collection books=new HashSet();
books.add("轻量级Java EE企业应用实战");
books.add("疯狂Java讲义");
System.out.println("c集合是否完全包含books合集?"+c.containsAll(books));
//用c的集合减去books集合里的元素
c.removeAll(books);
System.out.println("c集合的元素:"+c);
//删除c集合里的所有元素
c.clear();
System.out.println("c集合的元素:"+c);
//books集合里只剩下c集合里也包括的元素
books.retainAll(c);
System.out.println("books集合的元素:"+books);
}
}
程序中创建了两个Collection对象,一个是c集合,一个是books集合,分别是ArrayList和HashSet,虽然它们的实现类不同,但当把它们当成Collection来使用时,使用add, remove, clear等方法来操作集合元素时没有区别.
二. Iterator接口
Iterator接口也是Java集合框架成员,但它与Collection系列和Map系列集合不一样:Collection和Map是用来装对象的,而Iterator是用来遍历对象的.
import java.util.Iterator;
import java.util.Collection;
import java.util.HashSet;
public class IteratorTest
{
public static void main(String[] args)
{
//创建一个集合
Collection books=new HashSet();
books.add("小王子");
books.add("哈利波特");
books.add("海伦凯乐hahaha");
//获取books集合对应的迭代器
Iterator it=books.iterator();
while(it.hasNext())
{
//it.next()方法返回的数据类型是Object类型
//需要强制转换
String book=(String)it.next();
System.out.println(book);
if(book.equals("哈利波特"))
{
//从集合中删除上一次next方法返回的元素
it.remove();
}
//对book变量赋值,不会改变集合元素本身
book="Test String"; //a
}
System.out.println(books);
}
}
Iterator仅用于遍历集合,本身没有提供盛装对象的能力,在代码a行对book变量赋值,集合中的元素不会有任何改变.只有在用Iterator的remove方法删除上一次next方法返回的集合元素才可以.
绝对不可以在用Iterator迭代器遍历的时候的删除Collection集合中的元素!!
三. 用foreach遍历集合
import java.util.Collection;
import java.util.HashSet;
public class ForeachTest
{
public static void main(String[] args)
{
//创建一个集合
Collection books=new HashSet();
books.add(new String("小王子"));
books.add(new String("哈利波特"));
books.add(new String("海伦凯勒"));
for(Object obj:books)
{
//此处book变量也不是集合元素本身
String book=(String)obj;
System.out.println(book);
if(book.equals("哈利波特"))
{
//下面代码会引发ConcurrentModificationException异常
books.remove(book);
}
}
System.out.println(books);
}
}
用foreach循环遍历访问Collection集合里的元素更加简洁,与Iterator接口迭代相同的是,foreach循环中修改迭代变量的值也是没有任何意义的.
参考文献:《疯狂Java讲义》