Java集合遍历方式详解

  Java集合框架是Java编程语言的核心部分之一。它提供了许多有用的数据结构和算法,用于存储和处理数据。其中,集合框架中的集合类型包括单列集合和双列集合,这些集合类型都提供了不同的遍历方式。本文将详细介绍Java集合遍历方式,并提供大量例子帮助读者更好地理解和掌握这些遍历方式。

1、单列集合遍历方式

List提供了多种遍历方式,包括迭代器遍历、增强for遍历、for Each(Lambda表达式)遍历、普通for循环遍历、stream流遍历。

 1.1普通for循环遍历

普通for循环遍历是List最常用的遍历方式之一。它的语法如下:

for(int i = 0; i < list.size(); i++) {
    Object obj = list.get(i);
    // do something
}

例:

import java.util.ArrayList;
import java.util.List;

public class List {
    public static void main(String[] args) {
        // 创建一个List集合
        List<String> fruits = new ArrayList<>();
        fruits.add("Apple");
        fruits.add("Banana");
        fruits.add("Cherry");
        fruits.add("Date");

        // 使用for循环遍历List
        for (int i = 0; i < fruits.size(); i++) {
            System.out.println(fruits.get(i));
        }
    }
}

1.2 迭代器遍历

 迭代器是Java集合框架中的一个重要概念,它提供了一种统一的方法来遍历集合中的元素,而无需暴露集合的内部结构。使用迭代器遍历集合时,你通常会调用集合的iterator()方法来获取一个迭代器实例,然后通过这个迭代器来遍历集合中的元素。 List是一种有序的集合,其中的元素可以重复。它的语法如下:

Iterator<Object> iterator = list.iterator();
while(iterator.hasNext()) {
    Object obj = iterator.next();
    // do something
}

例:

package com.wedu.listlist;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

public class list {
    public static void main(String[] args) {
        List<String> fruits = new ArrayList<>();
        fruits.add("Apple");
        fruits.add("Banana");
        fruits.add("Cherry");
        fruits.add("Date");
        // 获取List的迭代器
        Iterator<String> iterator = fruits.iterator();
        // 使用迭代器遍历List
        while (iterator.hasNext()) {
            // 调用next()方法获取下一个元素,并将它赋值给fruit变量
            String fruit = iterator.next();
            // 对获取到的元素进行操作,这里我们简单地打印它
            System.out.println(fruit);
        }
    }
}

1.3增强for遍历

增强型for循环的语法如下:

for (type variable : collection) {
    // 循环体
}

这里,type是集合中元素的类型,variable是每次迭代中当前元素的变量名,collection是要遍历的集合。

例:

import java.util.ArrayList;
import java.util.List;

public class List {
    public static void main(String[] args) {
        // 创建一个List集合
        List<String> fruits = new ArrayList<>();
        fruits.add("Apple");
        fruits.add("Banana");
        fruits.add("Cherry");
        fruits.add("Date");

        // 使用增强型for循环遍历List
        for (String fruit : fruits) {
            System.out.println(fruit);
        }
    }
}

  增强型for循环是只读的,意味着你不能在循环体中修改集合中的元素。如果你需要修改元素,应该使用传统的for循环或者迭代器,并且确保在循环体内部正确处理修改操作。

 1.4for Each(Lambda表达式)遍历

 for Each也是仅仅用来遍历,不能进行其他操作。

package com.wedu.listlist;
import java.util.ArrayList;
import java.util.List;
import java.util.function.Consumer;
public class List1 {
    public static void main(String[] args) {
        List<String> fruits = new ArrayList<>();
        fruits.add("Apple");
        fruits.add("Banana");
        fruits.add("Cherry");
        fruits.add("Date");
        //利用Lambda表达式进行遍历
        fruits.forEach(new Consumer<String>() {
            @Override
            public void accept(String s) {
                System.out.println(s);
            }
        });
        //简化过程
        System.out.println("--------------------------------");
        fruits.forEach((String s)-> {
                System.out.println(s);
            }
        );
        System.out.println("--------------------------------");
        //最终简化成一行代码
        fruits.forEach((s)-> System.out.println(s));
    }
}

1.5stream流遍历

package com.wedu.listlist;
import java.util.ArrayList;
import java.util.Collections;
public class list {
    public static void main(String[] args) {
       //单列集合获取stream流
        ArrayList<String> list=new ArrayList<>();
        Collections.addAll(list,"b","c","d");
        list.stream().forEach(s -> System.out.println(s));
    }
}

2、双列集合遍历方式

2.1通过键找值

package com.wedu.Map;

import java.util.HashMap;
import java.util.Map;
import java.util.Set;

public class MapDemo1 {
    //map集合第一种遍历---通过键找值
    public static void main(String[] args) {
        //创建map集合对象
        Map<String,String> map=new HashMap<>();
        //添加元素
        map.put("马克菠萝","瑶");
        map.put("伽罗","明世隐");
        map.put("后羿","蔡文姬");
        //通过键找值遍历
        //获取所有的键,把它放在一个单列集合中
        Set<String> keys=map.keySet();
        //遍历单列集合得到每一个键
        for (String key : keys) {
            //利用map集合的键获取对应的值
            String value=map.get(key);
            System.out.println(key+"="+value);

        }

    }
}

 2.2通过键值对对象遍历

package com.wedu.Map;


import java.util.HashMap;
import java.util.Map;
import java.util.Set;

public class MapDemo2 {
    //map集合的第二种遍历---通过键值对对象遍历
    public static void main(String[] args) {
        //创建map集合对象
        Map<String,String> map=new HashMap<>();
        //添加元素
        map.put("马克菠萝","瑶");
        map.put("伽罗","明世隐");
        map.put("后羿","蔡文姬");
        map.put("公孙离","大乔");
        //通过键值对对象遍历
        //通过set集合获取所有的键值对对象
        Set<Map.Entry<String, String>> entries = map.entrySet();
        //遍历entries这个集合去得到里面的每一个键值对对象
        for (Map.Entry<String, String> entry : entries) {
            String key=entry.getKey();
            String value=entry.getValue();
            System.out.println(key+"="+value);
        }
    }
}

2.3利用Lambda表达式进行遍历

package com.wedu.Map;

import java.util.HashMap;
import java.util.Map;
import java.util.function.BiConsumer;

public class MapDemo3 {
    //map集合的第三种遍历---Lambda表达式
    public static void main(String[] args) {
        //创建map集合对象
        Map<String,String> map=new HashMap<>();
        //添加元素
        map.put("马克菠萝","瑶");
        map.put("伽罗","明世隐");
        map.put("后羿","蔡文姬");
        map.put("公孙离","大乔");
        map.put("孙尚香","太乙真人");
        //利用Lambda表达式进行遍历
        map.forEach(new BiConsumer<String, String>() {
            @Override
            public void accept(String key, String value) {
                System.out.println(key+"="+value);

            }
        });
        System.out.println("-----------------------------------");

        map.forEach((String key, String value)-> {
                System.out.println(key+"="+value);

            }
        );
        System.out.println("-----------------------------------");

        map.forEach(( key,  value)-> System.out.println(key+"="+value));
    }
}

2.4stream流遍历

package com.stream;

import java.util.HashMap;

public class StreamDemo2 {
    public static void main(String[] args) {
        //双列集合获取stream流
        HashMap<String,Integer> hm=new HashMap<>();
        hm.put("aaa",111);
        hm.put("bbb",222);
        hm.put("ccc",333);
        hm.put("ddd",444);
        //第一种获取stream流
        //hm.keySet().stream().forEach(s -> System.out.println(s));

        //第二种获取stream流
        hm.entrySet().stream().forEach(s->System.out.println(s));
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值