遍历List方法一:普通的for循环
for(int i=0;i<list.size();i++){ String temp=(Stirng)get(i); System.out.println(temp); }
遍历List方法二:增强for循环(使用泛型)
for(String temp:list){ System.out.println(temp); }
遍历List方法三:使用iterator迭代器(1)
for(Iterator<Integer> iter=list.iterator();iter.hasNext();){ Integer temp= iter.next(); System.out.println(temp); }
遍历List方法三:使用iterator迭代器(2)
Iterator iter=list.iterator(); while(iter.next()){ Object obj=iter.next(); iter.remove();//读取一个删除一个 System.out.println(obj); }
Set遍历方法一:增强for循环
for(String temp:set){ System.out.println(temp); }
Set遍历方法二:使用iterator迭代器(1)
for(Iterator<Integer> iter=set.iterator();iter.hasNext();){ Integer temp= iter.next(); System.out.println(temp); }
遍历Map方法一:使用entrySet
for(Iterator<Map.Entry<Integer,String>> iter=ss.iterator();iter.hasNext();){ Map.Entry<Integer,String> temp=iter.next(); System.out.println(temp); }
遍历Map方法二:根据key获取value
for (Iterator<Integer> iter = ss.iterator(); iter.hasNext(); ) { Integer temp = iter.next(); System.out.println(temp); }
这里for循环和增强for循环比较常见,所以着重讲解一下Iterator迭代器实现遍历List、Set、Map
首先从Iterator源码分析:
Iterator源码成员方法:hasNext();
如果迭代有更多元素,则返回{@code true}。(换句话说,如果{@link #next}将返回一个元素而不是抛出异常,则返回{@code true}。)。
next();
返回迭代中的下一个元素。 @return迭代中的下一个元素@throws NoSuchElementException如果迭代没有更多的元素。
remove();
从底层集合中删除此迭代器返回的最后一个元素(可选操作)。每次调用{@link #next}时,此方法只能调用。如果在迭代正在进行中以除调用此*方法之外的任何方式修改基础集合,则未指定迭代器*的行为。 @implSpec 默认实现抛出 {@link UnsupportedOperationException}的实例,不执行任何其他操作。@throws UnsupportedOperationException如果此迭代器不支持{@code remove} 操作@throws IllegalStateException如果{@code next}方法尚未被调用,或者{@code remove}方法已经在最后一次调用{@code next} 方法后被调用。
而又因为在List、Set、Map源码中都有erator<E> iterator();如果此列表包含指定的元素,则返回true 。更正式地,返回 true当且仅当此列表包含至少一个元素e 时,以适当的顺序返回此列表中元素的迭代器。以正确的顺序返回此列表中元素的迭代器。
下面为示例:
package jihe; import java.util.*; /** * 测试迭代器Iterator遍历List,Set,Map * author Gsan */ public class TestIterator { public static void main(String[] args){ testIteratorList(); System.out.println("+++++++++++++++++++++++++++++"); testIteratorSet(); System.out.println("+++++++++++++++++++++++++++++"); testIteratorMap1(); System.out.println("+++++++++++++++++++++++++++++"); testIteratorMap2(); } public static void testIteratorList(){ List<Integer> list=new ArrayList<>(); list.add(1); list.add(3); list.add(2); for(Iterator<Integer> iter=list.iterator();iter.hasNext();){ Integer temp= iter.next(); System.out.println(temp); } } public static void testIteratorSet(){ Set<String> set=new HashSet(); set.add("aa"); set.add("bb"); set.add("cc"); for(Iterator<String> iter=set.iterator();iter.hasNext();){ String temp=iter.next(); System.out.println(temp); } } //Map第一种遍历方法 public static void testIteratorMap1(){ Map<Integer,String> map=new HashMap<>(); map.put(100,"张三"); map.put(60,"李四"); map.put(200,"赵六"); //将Entry中的key和value集成集合 Set<Map.Entry<Integer, String>> ss=map.entrySet(); for(Iterator<Map.Entry<Integer,String>> iter=ss.iterator();iter.hasNext();){ Map.Entry<Integer,String> temp=iter.next(); System.out.println(temp); } } //Map第二种遍历方法 public static void testIteratorMap2() { Map<Integer, String> map = new HashMap<>(); map.put(100, "张三"); map.put(60, "李四"); map.put(200, "赵六"); //将Entry中的key集成集合 Set<Integer> ss = map.keySet(); for (Iterator<Integer> iter = ss.iterator(); iter.hasNext(); ) { Integer temp = iter.next(); System.out.println(temp); } } }
运行结果: