JAVASE之集合(一)【iterable】

来源:互联网 发布:ip反查域名网站 编辑:程序博客网 时间:2024/06/05 19:03

    今天本来想看看List集合的源码来着,结果跟代码跟着跟着发现Collection还有父级接口Iterable,我的天,我学了一年了既然没有发现,还是太不扎实了,要把一个技术掌握的十分全面,还真是一件楠楠的事儿,别问我楠楠是谁,因为我打错字了,不想改。

   

Iterable接口的源码:
public interface Iterable{
Iterator<T> iterator();
}

一、Iterable是Collection接口的父级接口,Iterable有一个方法[ Iterator<T> iterator() ] 返回一个类型为T的迭代器。
返回的迭代器Iterator接口中,有三个方法,boolean hasNext() 是否含有下一个元素, E next() 返回下一个元素 , void remove()移除一个元素.

二、因Iterable是Collection的父级接口,所以可以出现这样的写法 Iterable<T> some = new ArrayList<T>(); 称之为多态。但这种写法出现时,some只可以使用Iterable中的方法或Object中的方法,没有办法使用ArrayList中的方法。所以只能遍历和删除一个集合中的元素,不能添加修改。

三、Iterator迭代器的遍历方法:
List<String> list = new ArrayList<String>();
list.add("A");
list.add("B");
list.add("C");
Iterator listIterator = list.iterator();
while(listIterator.hasNext()){
System.out.println(listIterator.next());
}

四、使用Iterator迭代器遍历的注意事项

while(listIterator.hasNext()){
listIterator.remove();
}
以上情况会出现IllegalStateException异常,API中是这样形容这个异常的,在iterator的next()方法未被调用时,或者iterator的remove()已经被调用时,会抛出这个异常。我认为是直接调用remove()方法,迭代器不知道需要删除的是哪一条数据。所以正确的格式应该是
while(listIterator.hasNext()){
listIterator.next();
listIterator.remove();
}
这种情况会将迭代器中的元素全部删除。
还有一种情况是remove()方法会抛出UnsupportedOperationException,API中形容为迭代器不支持remove操作。我没试出来怎么抛出这个异常。不错也好。

②next()方法会抛出的异常
在遍历一个集合的时候,最抓(抓:不好(新疆话))的就是集合中没有元素了,会抛出NoSuchElementException异常,也就是集合中没有这个元素。



1 0
原创粉丝点击