zoukankan      html  css  js  c++  java
  • HashMap的几种遍历方式(转载)

    今天讲解的主要是使用多种方式来实现遍历HashMap取出Key和value,首先在java中如果想让一个集合能够用for增强来实现迭代,那么此接口或类必须实现Iterable接口,那么Iterable究竟是如何来实现迭代的,在这里将不做讲解,下面主要讲解一下遍历过程。

    1
    2
    3
    4
    5
    6
    //定义一个泛型集合
    Map<String, String> map = new HashMap<String, String>();
    //通过Map的put方法向集合中添加数据
        map.put("001", "刘备");
        map.put("002", "曹操");
        map.put("003", "孙权");

    方式一:使用该Map接口的KeySet方法来实现

    问题:我们都知道Map接口并没有实现Iterable接口,为什么能用他的KetSet方法就能实现迭代呢?

    解析:因为KeySet方法返回此映射中包含的键的 Set 视图,这个方法竟然能返回一个Set试图,也就说他的返回值类型是一个Set接口,我们可以通过API文档看到Set接口他是实现了Iterable接口,所以能实现迭代。

    1
    2
    3
    4
    5
    6
    //调用KeySet方法放回一个Set接口类型
        Set<String> set = map.keySet();
        //使用for增强来取出key和value
        for (String item : set) {
          System.out.println("Key是:" + item + ";Value值是:" + map.get(item));
        }

    方式二:使用Map接口的Values方法实现(for增强)

    同理:调用Map接口的values方法他放回一个Collection试图,Collection接口他又实现了Iterable接口,所以能够迭代。

    1
    2
    3
    4
    Collection<String> con = map.values();
        for (String item : con) {
          System.out.println("Value值是:" + item);
        }

    方式三:使用Map接口的entrySet方法实现(for增强)

    entrySet:entrySet()的返回值也是返回一个Set集合,此集合的类型为Map.Entry,Map.Entry是Map声明的一个内部接口,此接口为泛型,定义为Entry<K,V>。它表示Map中的一个实体(一个key-value对)。

    1
    2
    3
    4
    5
    Set<Entry<String, String>> setentry = map.entrySet();
        for (Entry<String, String> item : setentry) {
          System.out.println("Key是:" + item.getKey() + ";Value值是:"
              + item.getValue());
        }

    方式四:使用Map接口的keySet().Iterable()(while循环)

    Iterable():返回在此 set 中的元素上进行迭代的迭代器。返回的元素没有特定的顺序(除非此 set 是某个提供顺序保证的类的实例)。返回值类型Iterator<E>

    1
    2
    3
    4
    Iterator<String> it = map.keySet().iterator();
    //如果仍有元素可以迭代,则返回 true。    while (it.hasNext()) {     //获取Key值
       String key = it.next();   System.out.println("Key是:" + key + ";Value值是:" + map.get(key));
       }

    方式五:使用Map接口的value.Iterable()(while循环)

    1
    2
    3
    4
    5
    Iterator<String> it1 = map.values().iterator();
        while (it1.hasNext()) {
          String value = it1.next();
          System.out.println("Value值是:" + value);
        }

    方式六:使用Map接口的entrySet().Iterable()(while循环)

    1
    2
    3
    4
    5
    Iterator<Entry<String, String>> it2 = map.entrySet().iterator();
        while (it2.hasNext()) {
          Entry<String,String> entry=it2.next();
          System.out.println("Key是:" + entry.getKey() + ";Value值是:" + entry.getValue());
        }
  • 相关阅读:
    js 判断中文输入法是否输入完成(系统自带输入法)
    Winform DataGridView中的Button点击事件
    利用sp_addlinkedserver实现远程数据库链接
    锐浪报表多个子报表赋值
    未在本地计算机上注册“Microsoft.ACE.OLEDB.12.0”提供程序
    C# 中解决页面刷新后字体等变大问题
    QRCode 扫描二维码、扫描条形码、相册获取图片后识别、生成带 Logo 二维码、支持微博微信 QQ 二维码扫描样式
    c#4.0 qrcode二维码生成 简单封装
    .net2.0 生成二维码
    c# 生成下部带文字的二维码
  • 原文地址:https://www.cnblogs.com/enjoyjava/p/7011274.html
Copyright © 2011-2022 走看看