Java随记-Collection和Itearator的使用

一. 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讲义》

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值