美文网首页
keySet()、entrySet()和Map.Entry用法

keySet()、entrySet()和Map.Entry用法

作者: 盘丝仙仙 | 来源:发表于2019-11-16 16:27 被阅读0次

    2019-11-16

    package com.lixing.jihe13;

    import java.util.*;

    /**

    * @author: ZH

    * @date: 2019/10/25 10:45

    * @description: Map对象中的keySet()、entrySet()和Map.Entry用法

    */

    public class MapEntryTest {

    public static void main1(String[] args) {

    //keySet():返回的是map对象的key值的set集合

            Map map =new HashMap<>();

            map.put(1, "aa");

            map.put(2, "bb");

            //1.先获取map集合的key的set集合

            Set keySet = map.keySet();

            //2.根据set集合,获取其迭代器

            Iterator iterator = keySet.iterator();

            while (iterator.hasNext()) {

    //3.获取key

                Integer key = iterator.next();

                //4.根据key得到value

                System.out.println("key=" + key +" value=" + map.get(key));

            }

    //output

    //key=1 value=aa

    //key=2 value=bb

        }

    public static void main2(String[] args) {

    //entrySet()返回映射所包含的映射关系的Set集合(一个关系就是一个键-值对),就是把(key-value)作为一个整体一对一对地存放到Set集合当中的。

            Map map =new HashMap<>();

            map.put(1, "aa");

            map.put(2, "bb");

            //1.先获取map集合的entrySet

    //  Set>这个写法好复杂

    //entrySet()的返回值也是返回一个Set集合,此集合的类型为Map.Entry

            Set> entrySet = map.entrySet();

            //2.根据set集合,获取其迭代器

    //照抄上面Map.Entry复杂写法

            Iterator> iterator = entrySet.iterator();

            while (iterator.hasNext()) {

    //3.获取迭代器

    //Map.Entry

                Map.Entry map1 = iterator.next();

                //4.根据迭代器直接得到key value

                System.out.println("key=" + map1.getKey() +" value=" + map1.getValue());

            }

    //output

    //key=1 value=aa

    //key=2 value=bb

    //ZH总结

    //虽然使用keySet及entrySet来进行遍历能取得相同的结果,但两者的遍历速度是有差别的。

    //  keySet():迭代后只能通过get()取key;再根据key值取value。

    //  entrySet():迭代后可以e.getKey(),e.getValue()同时取key和value。

    //

    //同时,keySet()的速度比entrySet()慢了很多,也就是keySet方式遍历Map的性能不如entrySet性能好

    //为了提高性能,以后多考虑用entrySet()方式来进行遍历。

        }

    public static void main3(String[] args) {

    //values()只能得到values 得不到key

            Map map =new HashMap<>();

            map.put(1, "aa");

            map.put(2, "bb");

            Collection values = map.values();

            Iterator iterator = values.iterator();

            while (iterator.hasNext()) {

    String value = iterator.next();

                System.out.println(" value=" + value);

            }

    //output

    // value=aa

    // value=bb

        }

    public static void main(String[] args) {

    //看看下面代码能否很顺眼

            Map>TOKEN_MAP=new HashMap(1);

            Map map =new HashMap(1);

            boolean flag =true;

            Long nowTime = System.currentTimeMillis() /1000L;

            Set> entrySet =new HashSet();

            if (TOKEN_MAP.get("tokenType") !=null) {

    entrySet = ((Map) TOKEN_MAP.get("tokenType")).entrySet();

            }

    if (((Set) entrySet).isEmpty()) {

    flag =false;

            }

    if (!flag) {

    map.put(System.currentTimeMillis() /1000L, "token1");

                TOKEN_MAP.put("tokenType", map);

            }else {

    Iterator> iterator = ((Set) entrySet).iterator();

                if (iterator.hasNext()) {

    Map.Entry entry = (Map.Entry) iterator.next();

                    Long oldTime = (Long) entry.getKey();

                    Long diff = nowTime - oldTime;

                    //if (diff < (long)MINUTE) {

                    if (diff >3) {

    TOKEN_MAP.remove("tokenType");

                        map.put(System.currentTimeMillis() /1000L, "token2");

                        TOKEN_MAP.put("tokenType", map);

                    }

    }

    }

    }

    }

    相关文章

      网友评论

          本文标题:keySet()、entrySet()和Map.Entry用法

          本文链接:https://www.haomeiwen.com/subject/msbyictx.html