六.集合的遍历
(1)对于List,Set,Map。每个集合都有两种遍历方法:forEach,迭代器(forEach的底层实现也是迭代器)
(2)List的遍历,用迭代器的话,推荐用ListIterator
(3)迭代器遍历的步骤:
1.获取迭代器:iterator() 2.hasNext() 3.next()
(4)对Map遍历:可以遍历key和value,也可以遍历entry
不管采用forEach还是Iterator遍历,都首先要获得entry集(键值对集),然后再遍历(遍历key:getKey(),遍历value:getValue())
方法:hashMap.entrySet(),entry.getKey(),entry.getValue()
for循环,forEach,迭代器
一.ArrayList
1.for循环
2.迭代器Iterator
迭代器只能向后遍历,不能增,可以删
3.forEach(迭代器的变种)
4.ListIterator
相比于 Iterator 迭代器,这里的 ListIterator 向前向后都可以遍历,可增删
二.LinkedList
1.for循环
2.迭代器
1 Iterator<String> listIt = linkedList.listIterator(); 2 while(listIt.hasNext()){ 3 System.out.print(listIt.next()+" ");//A B C D 4 }
注意:如果想一边迭代,一边用集合自带的方法进行删除或者新增操作,都会抛出异常。
3.forEach(底层实现也是使用的迭代器)
三.HashSet
1.forEach
2.迭代器
四.HashMap
1.分别获取 key 集合和 value 集合
1 //1、分别获取key和value的集合 2 for(String key : map.keySet()){ 3 System.out.println(key); 4 } 5 for(Object value : map.values()){ 6 System.out.println(value); 7 }
2.获取 key 集合,然后遍历key集合,根据key分别得到相应value
1 //2、获取key集合,然后遍历key,根据key得到 value 2 Set<String> keySet = map.keySet(); 3 for(String str : keySet){ 4 System.out.println(str+"-"+map.get(str)); 5 }
3.得到 Entry 集合,然后遍历 Entry
1 //3、得到 Entry 集合,然后遍历 Entry 2 Set<Map.Entry<String,Object>> entrySet = map.entrySet(); 3 for(Map.Entry<String,Object> entry : entrySet){ 4 System.out.println(entry.getKey()+"-"+entry.getValue()); 5 }
4.迭代
1 //4、迭代 2 Iterator<Map.Entry<String,Object>> iterator = map.entrySet().iterator(); 3 while(iterator.hasNext()){ 4 Map.Entry<String,Object> mapEntry = iterator.next(); 5 System.out.println(mapEntry.getKey()+"-"+mapEntry.getValue()); 6 }
基本上使用第三种方法是性能最好的,
第一种遍历方法在我们只需要 key 集合或者只需要 value 集合时使用;
第二种方法效率很低,不推荐使用;
第四种方法效率也挺好,关键是在遍历的过程中我们可以对集合中的元素进行删除。
一些方法:keySet(),values(),entrySet()---getKey(),getValue()
5.forEach只能访问元素,不能修改