集合遍历数组三种常用方式(Collecton和Map)
Collection集合遍历数组的三种方式:
- 迭代器
- foreach(增强for循环)
- JDK1.8之后的新技术Lambda
迭代器:
方法:public Iterator inerator():获取集合对应的迭代器,用来遍历
E next():获取下一个元素值
boolean hasNext():判断是否有下一个元素,有返回true,反之
流程:1.获取集合对应迭代器
Iterator it = lists.iterator
2.定义一个while循环,it.next()取出元素,it.hasnext()询问判断
public class IteratorDemo { public static void main(String[] args) { Collection<String> lists=new ArrayList<>(); lists.add("zyl"); lists.add("xyy"); lists.add("huy"); System.out.println(lists); Iterator<String> it=lists.iterator(); while (it.hasNext()){ System.out.println(it.next()); } } }
ListIterator<E> listIterator():列表迭代器
是List特有的迭代器,该迭代器继承了Iterator,所以也有hasNext()和next()方法
特有功能:
E previous() 返回列表中的上一个元素,并向后移动光标位置。
boolean hasPrevious() 返回 true如果遍历反向列表,列表迭代器有多个元素。
注意:如果想要逆序遍历,必须先正序遍历一次,才能逆序遍历,一般情况下无意义,一般不使用
import java.util.ArrayList;
import java.util.List;
import java.util.ListIterator;
public class ArrarListDemo4 {
public static void main(String[] args) {
List lists=new ArrayList();
lists.add("1gfggfg");
lists.add("2fetgrg");
lists.add("3ouoiho");
lists.add("4iiiou");
ListIterator lt = lists.listIterator();
while (lt.hasNext()){
lt.next();
}
while(lt.hasPrevious()){
Object o = lt.previous();
String s = (String) o;
System.out.println(s);
}
}
}
foreach:可以遍历集合或数组
格式:for(被遍历集合或者数组中元素的类型 变量名称 : 被遍历集合或数组)
快捷键:被遍历数组 . for
缺点:foreach遍历无法知道遍历到哪个元素,因为没有索引
public class ForeachDemo1 { public static void main(String[] args) { Collection<String> lists=new ArrayList<>(); lists.add("yuyu"); lists.add("zyl"); lists.add("xyy"); lists.add("huy"); System.out.println(lists); for(String s:lists){ System.out.println(s); } } }
Lambda:
1.list.forEach(s->{
System.out.printlin(s);
});
2.lists.forEach(s -> System.out.println(s));
3.lists.forEach(System.out::println)
For循环通过 int size()和 E get(int index)遍历集合
import java.util.ArrayList; import java.util.List; public class ArrayListDemo5 { public static void main(String[] args) { List lists=new ArrayList(); lists.add("1gfggfg"); lists.add("2fetgrg"); lists.add("3ouoiho"); lists.add("4iiiou"); for (int i=0;i<lists.size();i++){ System.out.println(lists.get(i)); } } }
Map集合遍历元素的三种方式
1 .键找值方式
2 .键值对方式
3 .Lamda表达式
键找值方式
1.获取Map中所有的值,由于键是唯一的,所以返回一个Set集合存储所有的值。keyset()
2.遍历Set集合,得到每个键
3.根据键,获取键所对应的值。get(K key)
public class MapDemo2 { public static void main(String[] args) { Map<String,Integer> maps=new HashMap<>(); maps.put("iphoneX",10); maps.put("娃娃",30); maps.put("iphoneX",100);// Map集合后面重复的键对应的元素会覆盖前面重复的整个元素! maps.put("huawei",1000); maps.put("生活用品",10); maps.put("手表",10); Set<String> keys = maps.keySet(); System.out.println(keys);
// Iterator<String> it=keys.iterator(); // while (it.hasNext()){ // String key = it.next(); // Integer value=maps.get(key); // System.out.println(key+"="+value); // } for (String key : keys) { Integer value=maps.get(key); System.out.println(key+"="+value); } } }
Entry键值对对象:
public Set<Map .Entry< K, V>> entrySet();获取到Map集合中所有键值对对象的集合(Set集合)
public class MapDemo3 { public static void main(String[] args) { Map<String,Integer> maps=new HashMap<>(); maps.put("iphoneX",10); maps.put("娃娃",30); maps.put("iphoneX",100); maps.put("huawei",1000); maps.put("生活用品",10); maps.put("手表",10); Set<Map.Entry<String,Integer>> entries=maps.entrySet(); for(Map.Entry<String,Integer> entry:entries){ String key=entry.getKey(); Integer value=entry.getValue(); System.out.println(key+"="+value); } } }
Lambda:
public class MapDemo4 { public static void main(String[] args) { Map<String,Integer> maps=new HashMap<>(); maps.put("iphoneX",10); maps.put("娃娃",30); maps.put("iphoneX",100); maps.put("huawei",1000); maps.put("生活用品",10); maps.put("手表",10); maps.forEach((k,v)->{ System.out.println(k+"="+v); }); } }