Java中的Map、Set、List各种方式遍历

1. Map的5种遍历方法

package com.grandage.test;

import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;

public class MapTraversing {
    public static void main(String[] args) {

        Map<String, String> map = new HashMap<>();
        map.put("key1", "value1");
        map.put("key2", "value2");
        map.put("key3", "value3");

        //1. 普遍使用,二次取值
        System.out.println("通过Map.keySet遍历key和value");
        for (String key : map.keySet()) {
            System.out.println("key= " + key + " and value= " + map.get(key));
        }

        //2.
        System.out.println("通过Map.entrySet使用iterator遍历key和value:");
        Iterator<Map.Entry<String, String>> it = map.entrySet().iterator();
        while (it.hasNext()) {
            Map.Entry<String, String> entry = it.next();
            System.out.println("key= " + entry.getKey() + " and value= " + entry.getValue());
        }

        //3. 推荐,尤其是容量大时
        System.out.println("通过Map.entrySet遍历key和value");
        for (Map.Entry<String, String> entry : map.entrySet()) {
            System.out.println("key= " + entry.getKey() + " and value= " + entry.getValue());
        }

        //4. 通过Map.values()遍历所有的value,但不能遍历key
        for (String v : map.values()) {
            System.out.println("value= " + v);
        }
        //5. lambda遍历map
        map.forEach((k,v)-> System.out.println(k+"-<key=====value->"+v));
    }
}
复制代码

2.Set遍历的4种方法

package com.utils;

import java.util.HashSet;
import java.util.Iterator;
import java.util.LinkedHashSet;
import java.util.Set;

public class SetTraversing {
    public static void main(String[] args) {

        //Hashset 它不保证集合的迭代顺序;特别是它不保证该顺序恒久不变
        Set<String> set = new HashSet<>();
        set.add("value1");
        set.add("value2");
        set.add("value3");

        //LinkedHashSet 定义了迭代顺序,即按照将元素插入到集合中的顺序(插入顺序)进行迭代
        Set<String> setOrder = new LinkedHashSet<>();
        setOrder.add("value1");
        setOrder.add("value2");
        setOrder.add("value3");
        //1. 迭代遍历
        Iterator<String> it = set.iterator();
        while (it.hasNext()) {
            String str = it.next();
            System.out.println(str);
        }

        //2. for循环遍
        for (String str : setOrder) {
            System.out.println(str);
        }

        //2-1. 增强型for循环 优点还体现在泛型 假如:set中存放的是Object
        Set<Object> setObject = new HashSet<>();
        setObject.add(111);
        setObject.add("222");
        for (Object obj : setObject) {
            if (obj instanceof Integer) {
                int resultValue = (Integer) obj;
                System.out.println("Integer:" + resultValue);
            } else if (obj instanceof String) {
                String resultValue = (String) obj;
                System.out.println("String:" + resultValue);
            }
        }

        //3. 集合类的通用遍历方式, 从很早的版本就有, 用迭代器迭代
        for (Iterator it2 = set.iterator(); it2.hasNext(); ) {
            System.out.println(it2.next());
        }
        //4. jdk1.8之后
        set.forEach(System.out::println);
    }
}
复制代码

3.List集合的5种遍历方式

package com.utils;

import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.ListIterator;

public class ListTraversing {
    public static void main(String[] args) {
        // 有序元素 可重复 遍历
        List<String> arrayList=new ArrayList<>();
        arrayList.add("value1");
        arrayList.add("value2");

        //1. foreach遍历(不需要index推荐)
        for(String str:arrayList){
            System.out.println(str);
        }

        //2. for遍历(需要index推荐)
        for (int i=0,n=arrayList.size(); i < n ; i++) {
            System.out.println(arrayList.get(i));
        }

        //3. 迭代器遍历
        Iterator<String> it = arrayList.iterator();
        while(it.hasNext())
        {
            System.out.println(it.next());
        }

        //4. jdk1.8之后
        arrayList.forEach(System.out::println);

        //5.使用ListIterator
        ListIterator<String> listIt = arrayList.listIterator();
        while(listIt.hasNext())
        {
            System.out.println(listIt.next());
        }
    }
}
复制代码

博客的所有作品采用CC0 1.0 通用 (CC0 1.0)公共领域贡献进行许可

转载于:https://juejin.im/post/5d0add416fb9a07efe2dc1fd

猜你喜欢

转载自blog.csdn.net/weixin_34245169/article/details/93175665