Java 中对一些集合循环遍历做了一些特殊的封装。一些是方便我们的操作,一些是存在存储性能等方面设计的。关于 Iterable、Itetator、Enumeration,我们一起来学习它们。
Iterable
Iterable接口实现后的功能是“返回”一个迭代器,我们常用的实现了该接口的子接口有: Collection, Deque, List, Queue, Set 等.该接口的iterator()方法返回一个标准的Iterator实现。实现这个接口允许对象成为 For each 语句的目标。就可以通过For each语法遍历底层序列。
采用ArrayList对随机访问比较快,而for循环中的get()方法,采用的即是随机访问的方法,因此在ArrayList里,for循环较快。
采用LinkedList则是顺序访问比较快,iterator中的next()方法,采用的即是顺序访问的方法,因此在LinkedList里,使用iterator较快。
Iterator
在Java集合框架中Iterator用来替代Enumeration,Iterator允许调用者在迭代中从底层集合中删除元素。
接口方法如下:
boolean hasNext();//如果迭代中还有元素返回true。 Object next();//返回迭代中的下一个元素。 void remove();//迭代器从底层集合中删除刚返回的元素。该方法只能在每次调用next后调用一次。
具体用法如下:
public class TestIterator { public static void main(String[] args) { List list=new ArrayList(); Map map=new HashMap(); //初始化list和map的数据 for(int i=0;i<10;i++){ list.add(new String("list"+i) ); map.put(i, new String("map"+i)); } Iterator iterList= list.iterator();//List接口实现了Iterable接口 //循环list while(iterList.hasNext()){ System.out.println((String)iterList.next()); } //for each是jdk5.0新增加的一个循环结构,可以用来处理集合中的每个元素而不用考虑集合定下标。 //如需删除集合元素,慎用!!! for(String str : list){ System.out.println(str); } Iterator iterMap=map.entrySet().iterator(); //循环map while(iterMap.hasNext()){ System.out.println((Map.Entry)iterMap.next().getValue()); } } }
Enumeration
枚举接口,其作用和Iterator类似。只提供了遍历Vector和HashTable类型集合元素的功能,不支持元素的移除操作。
//是否还有元素,如果有返回true,否则表示至少含有一个元素 boolean hasMoreElements(); //如果Enumeration枚举对象还有元素,返回对象只能的下一个元素,否则抛出NoSuchElementException异常。 E nextElement();
使用教程如下:
public class TestEnumeration{ public static void main(String[] args){ //初始化创建Vector Vector v = new Vector(); v.addElement("Lisa"); v.addElement("Billy"); v.addElement("Mr Brown"); Enumeration e = v.elements();//返回Enumeration对象 while(e.hasMoreElements()){ String value = (String)e.nextElement();//调用nextElement方法获得元素 System.out.print(value); } //初始化创建hashtable Hashtable<String, String> ht = new Hashtable<String, String>(); for (int i = 0; i < 10000; i++) { ht.put("Key=" + i, "Val=" + i); } //1.Enumeration Enumeration<String> en = ht.keys();//使用枚举获取key //下面的也可以哦 //Enumeration<String> en = ht.elements();//使用枚举获取这个key-value对 while (en.hasMoreElements()) { System.out.print((String) en.nextElement()); } //2.Iterator 迭代器 //使用迭代器获取这个key-value对 Iterator<Entry<String, String>> it1 = ht.entrySet().iterator(); //使用迭代器获取这个key //Iterator<String> it2 = ht.keySet().iterator(); while (it.hasNext()) { //System.out.print((Entry<String, String>) it1.next().getKey()); //System.out.print((String) it2.next()); } } }
: » 详解 Java 中的 Iterable、Itetator、Enumeration
原创文章,作者:bd101bd101,如若转载,请注明出处:https://blog.ytso.com/tech/java/251764.html