Java关于集合遍历的几种方式List、Set、HashMap

List集合

  • 因为List集合底层是数组,所以可以用普通for循环,通过下角标来进行遍历
ArrayList<String> strings = new ArrayList<>();

        strings.add("张三");

        strings.add("李四");

        strings.add("王五");

        for (int i = 0; i < strings.size(); i++) {

            System.out.println(strings.get(i));
        }

但是普通for循环也有弊端,当在遍历集合的时候删除元素时会造成数据侧漏的问题。所以可以采取倒序遍历或者正序遍历删除时给下标减1的方法进行遍历。

  • 使用增强for循环
for (String string : strings) {
            System.out.println("string = " + string);
        }

 💡 注意!也不可以在增强for循环里面删除数据,会报:ConcurrentModificationException错误(当方法检测到对象的并发修改,但不允许这种修改时,抛出此异常)。

  • Iterator迭代器遍历
Iterator<String> iterator = strings.iterator();
        while (iterator.hasNext()) {
            System.out.println(iterator.next());
        }

iterator迭代器中有自带的remove()方法可以实现便遍历便删除操作。

Iterator<String> iterator = strings.iterator();
        while (iterator.hasNext()) {
            System.out.println(iterator.next());
            iterator.remove();
        }
  • 通过将集合通过toArray()方法转换为数组实现遍历
Object[] objects = strings.toArray();
        for (Object object : objects) {
            System.out.println("object = " + object);
        }//普通for循环也可以
  • 将集合转换为stream流,通过foreach()遍历
strings.stream().forEach(str -> System.out.println("str = " + str));
  • 使用lambda表达式
strings.forEach(System.out::println);

Set集合

因为Set集合的底层原理是通过map实现的,所以没有下标的概念,所以不能使用普通for循环进行遍历。

  • 增强for循环
HashSet<String> strings = new HashSet<>();
        strings.add("张三");
        strings.add("李四");
        strings.add("王五");

        for (String string : strings) {
            System.out.println("string = " + string);
        }

//输出 :string = 李四
	//     string = 张三
	//     string = 王五
  • iterator迭代器
Iterator<String> iterator = strings.iterator();
        while (iterator.hasNext()) {
            System.out.println(iterator.next());
        }
  • lambda表达式
strings.forEach(System.out::println);
strings.forEach(str -> System.out.println("str = " + str));
  • stream流
strings.stream().forEach(s -> System.out.println("s = " + s));

Map集合

不能用普通for循环进行遍历

  • 获得hashmap的keySet,使用增强for循环遍历key,通过key值获得value值
for (String s : hashMap.keySet()) {
            System.out.println("hashMap.get(s) = " + hashMap.get(s));
        }
  • 获得hashmap的entrySet,使用增强for循环直接获取键值对
Set<Map.Entry<String, String>> entries = hashMap.entrySet();
        for (Map.Entry<String, String> entry : entries) {
            System.out.println("entry = " + entry);
        }
//输出:entry = zs=张三
  • 获得hashmap的entrySet,使用iterator遍历器,直接获得键值对
Iterator<Map.Entry<String, String>> iterator = hashMap.entrySet().iterator();
        while (iterator.hasNext()) {
            System.out.println(iterator.next());
        }

//注意,因为hashmap是无序的,所以输出结果也是没有顺序的!
  • 通过stream流遍历
hashMap.entrySet().stream().forEach(System.out::println);
  • 通过lambda表达式
hashMap.forEach((k,v) -> System.out.println(k +"="+ v));

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值