1 Collection集合的遍历
1.1 迭代器
1.内容
- public Iterator iterator():
- E next():获取下一个元素值
- boolean hasNext():判断是否有下一个元素,有返回true,没有返回false
- 代码
public class CollectionDemo01 {
public static void main(String[] args) {
Collection<String> lists = new ArrayList<>();
lists.add("赵敏");
lists.add("小昭");
lists.add("殷素素");
lists.add("周芷若");
System.out.println(lists);
//1.得到集合的迭代器对象
Iterator<String> it = lists.iterator();
//String ele = it.next();
// System.out.println(it.next());
// System.out.println(it.next());
// System.out.println(it.next());
// System.out.println(it.next());
//System.out.println(it.next());//如果第五个,就会出现NoSuchElementException没有此元素异常
//2.使用while循环
while (it.hasNext()){
String ele = it.next();
System.out.println(ele);
}
}
}
1.2 增强for循环
- 内容
- 增强for循环遍历的关键是记住格式
- for(被遍历集合或者数组中元素的类型 变量名称:被遍历集合或者数组){}
- 注:无法知道是遍历到了哪个元素了,因为没有索引。
- 代码
public class CollectionDemo02 {
public static void main(String[] args) {
Collection<String> lists = new ArrayList<>();
lists.add("赵敏");
lists.add("小昭");
lists.add("殷素素");
lists.add("周芷若");
System.out.println(lists);
for(String x:lists){//x就像游标一样//快捷方式:lists.for
System.out.println(x);
}
int[] ages = new int[]{17,18,38,21};
for (int x : ages) {
System.out.println(x);
}
}
}
1.3 Lambda表达式
- 内容
- lists.forEach(x->{
System.out.println(x);
});
- 代码
public class CollectionDemo03 {
public static void main(String[] args) {
Collection<String> lists = new ArrayList<>();
lists.add("赵敏");
lists.add("小昭");
lists.add("殷素素");
lists.add("周芷若");
System.out.println(lists);
lists.forEach(new Consumer<String>() {///Consumer也是一个接口,用的Comsumer接口进行遍历的
@Override
public void accept(String s) {
System.out.println(s);
}
});
//简化匿名内部类
lists.forEach((String s)->{
System.out.println(s);
});
//简化类型
lists.forEach((s)->{
System.out.println(s);
});
//简化小括号,因为只有一个参数
lists.forEach(s->{
System.out.println(s);
});
//简化大括号和;,因为只有一行代码
lists.forEach(s->
System.out.println(s)
);
//方法引用再次简写,这也太装了
lists.forEach(System.out::println);
}
}
}
2 List集合的遍历方式
2.1 for循环
- 内容
因为list集合有索引,因此可以通过索引取值,用size确定大小,用get取值 - 代码
public static void main(String[] args) {
List<String> lists = new ArrayList<>();
lists.add("java1");
lists.add("java2");
lists.add("java3");
for(int i = 0;i<lists.size();i++){
String ele = lists.get(i);
System.out.println(ele);
}
}
2.2 迭代器
- 内容:同Collection遍历
- 代码
public static void main(String[] args) {
List<String> lists = new ArrayList<>();
lists.add("java1");
lists.add("java2");
lists.add("java3");
Iterator it = lists.iterator();
while (it.hasNext()){
System.out.println(it.next());
}
}
2.3 增强for循环
- 内容:同Collection遍历
- 代码
public static void main(String[] args) {
List<String> lists = new ArrayList<>();
lists.add("java1");
lists.add("java2");
lists.add("java3");
for(String x:lists){
System.out.println(x);
}
}
2.4 Lambda表达式
- 内容:同Collection遍历
- 代码
public static void main(String[] args) {
List<String> lists = new ArrayList<>();
lists.add("java1");
lists.add("java2");
lists.add("java3");
lists.forEach(s->{
System.out.println(s);
});
}
3 Set集合的遍历方式
HashSet,因为没索引,无序,不重复,因此没有List的的第一种for循环
其他的LinkedHashSet,TreeSet略
4 Map集合的遍历
主要讲HashMap的
4.1 键找值
- 内容
- 先获取Map集合的全部键的Set集合
- 遍历键的Set集合,通过键找值
- 代码
public static void main(String[] args) {
Map<String, Integer> maps = new HashMap<>();
maps.put("娃娃",1);
maps.put("口红",2);
maps.put("散粉",3);
maps.put("剃须刀",4);
maps.put("肥皂盒",4);
maps.put("洗洁精",5);
maps.put("洗衣液",6);
System.out.println(maps);
//a.先获取Map集合的全部键的Set集合
Set<String> keys = maps.keySet();
//b.通过遍历键然后通过键取对应的值
for (String key : keys) {
System.out.println(key+"="+maps.get(key));
}
}
4.2 键值对
- 内容
- 把Map集合转换成Set集合
- 此时键值对元素的类型就确定了,类型是键值对实体类型
- 接下来就可以用foreach遍历这个Set集合
- 代码
public static void main(String[] args) {
Map<String, Integer> maps = new HashMap<>();
maps.put("娃娃",1);
maps.put("口红",2);
maps.put("散粉",3);
maps.put("剃须刀",4);
maps.put("肥皂盒",4);
maps.put("洗洁精",5);
maps.put("洗衣液",6);
System.out.println(maps);
//2.键值对的遍历:更加面向对象的方式,代码有点复杂,不过问题不大
//思想:直接把键值当作一个整理取遍历,但是增强for循环不能遍历Map集合
// 因此通过Set<Map.Entry<K,V>>转成Set集合中的键值对实体类型从而让for遍历,就是使用maps.entrySet(),再用Set<>中的Map实体类型接收
Set<Map.Entry<String, Integer>> entries = maps.entrySet();
//这样就能遍历了!
for (Map.Entry<String, Integer> entry : entries) {
System.out.println(entry);
}
}
4.3 Lambda表达式
- 内容:很简洁
- 代码
public static void main(String[] args) {
Map<String, Integer> maps = new HashMap<>();
maps.put("娃娃",1);
maps.put("口红",2);
maps.put("散粉",3);
maps.put("剃须刀",4);
maps.put("肥皂盒",4);
maps.put("洗洁精",5);
maps.put("洗衣液",6);
System.out.println(maps);
maps.forEach((k,v)->{
System.out.println(k+"=>"+v);
});
}
}