Ch_03 表、栈和队列

1.解释一个数组arr在必要的时候如何被拓展(其初始长度为10)

int [] arr=new int[10];
....
//下面我们决定需要扩大arr
int [] newArray=new int[arr.lenth*2];
for(int i=0;i<arr.length;i++){
    newArray[i]=arr[i];
}
arr=newArray;

2.Iterator接口
Iterator接口的思路是,通过iterator方法,每个集合均可创建并返回给客户一个实现Iterator接口的对象,并将当前位置的概念在对象内部存储下来。
每次对next的调用都给出集合的(尚未见到)下一项。因此,第1次调用next给出第1项,第2次调用给出第2项,等等。
hasNext用来告诉是否存在下一项。当编译器见到一个正在用于Iterator的对象的增强的for循环的时候,它用于iterator方法的那些调用代替增强的for循环以得到一个Iterator对象,然后调用next和hasNext。因此,前面看到print例程由编译器重写,见图3-8所示。

public static <AnyType> void print(Collection<Antypr> coll){
    Iterator<AnyType> itr=coll.iterator();
    while(itr.hasNext()){
        AnyType item=itr.next();
        System.Out.println(item);
    }
}
由于Iterator接口中的现有方法有限,因此,很难使用Iterator做简单遍历 Collection以外的任何工作。Iterator接口还包含一个方法,叫做remove。该方法可以删除有next最新返回的项(此后,我们不能调用remove,知道对next再一次调用以后)。虽然Collection接口也包含一个remove方法,但是,使用Iterator的remove方法可能有更多的优点。
Iterator的remove方法的主要优点在于,Collection的remove方法必须首先找出要被删除的项。如果知道所要删除的的项的准确位置,那么删除它的开销很可能要小得多。
当直接使用Iterator(而不是通过一个增强的for循环间接使用)时,重要的是要记住一个基本法则:**如果对正在被迭代的集合进行结构上的改变(即对该集合使用add、remove、或者clear方法),那么迭代器就不再合法(并且在其后使用该迭代器时将会有ConcurrentModificationException异常被抛出)。**
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值