Map中的 keySet() 方法 与 Iterator 迭代的遍历,LinkedHashMap与HashMap区别

keySet()方法

如果有一个Map对象,可以使用 map.keySet() 方法获取所有的key值,

Iterator迭代器

Java Iterator(迭代器)不是一个集合,它是一种用于访问集合的方法。

如果是 HashMap、HashSet 这些则打印的顺序于你插入的顺序无关,只与你插入的内容有关(根据HASHCODE排序)的。所以这样输出我们会丢失我们插入时的顺序。

如果我们需要按照插入的顺序进行迭代遍历,则创建Map时新建 LinkedHashMap 。它继承于 HashMap,底层是数组+链表。它额外维护了一个双向链表用于保持迭代顺序。此外,LinkedHashMap可以很好的支持LRU算法。具体测试的代码如下:

import java.util.*;

public static void main(String[] args) {
        Map<Integer,Integer> linkedhashmap = new LinkedHashMap<>();
        Map<Integer,Integer> hashmap = new HashMap<Integer,Integer>();
        linkedhashmap.put(1, 1);   //为linkedhashmap赋值
        linkedhashmap.put(3, 3);
        linkedhashmap.put(2, 2);
        linkedhashmap.put(5, 5);
        linkedhashmap.put(4, 4);

        hashmap.put(1, 1);   //为hashmap赋值
        hashmap.put(3, 3);
        hashmap.put(2, 2);
        hashmap.put(5, 5);
        hashmap.put(4, 4);

        Iterator it_link = linkedhashmap.keySet().iterator();  //新建一个迭代器
        while ( it_link.hasNext() ){
            //linkedhashmap.remove( itnext.next() );  //可以通过此方法按照Set的顺序删除键值对
            System.out.println( it_link.next() );
        }

        Iterator it_map = hashmap.keySet().iterator();

        while( it_map.hasNext() ){
            //hashmap.remove( it_map.next() );  //可以通过此方法按照HashCode的顺序删除键值对
            System.out.println( it_map.next() );
        }

    }

我们按照1,3,2,5,4的顺序分别插入到 linkedhashmaphashmap 中。通过迭代器遍历输出结果,linkedhashmap会根据Set的顺序输出。hashmap会根据HashCode的顺序输出。

输出结果:

  • 5
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
好的,我来为您解答。 首先,我们需要了解Map是一种键值对的数据结构。它允许我们使用键来快速获取对应的值。Java常用的Map实现类有HashMap、TreeMapLinkedHashMap等。 下面是一个简单的Map例子,其存储了一些人的姓名和对应的年龄: ```java Map<String, Integer> ageMap = new HashMap<>(); ageMap.put("Alice", 25); ageMap.put("Bob", 30); ageMap.put("Charlie", 35); ``` 这里使用了put方法将键值对存储到Map。接下来,我们可以使用get方法通过键来获取对应的值: ```java int aliceAge = ageMap.get("Alice"); // 25 ``` 除了put和get方法Map还提供了许多其他有用的方法,下面我们来介绍一些常用的方法。 ### keySet方法 keySet方法返回一个Set集合,其包含了Map所有键的集合。我们可以使用foreach遍历这个集合来遍历Map所有的键和对应的值: ```java for(String name : ageMap.keySet()) { int age = ageMap.get(name); System.out.println(name + " is " + age + " years old."); } ``` ### entrySet方法 entrySet方法返回一个Set集合,其包含了Map所有键值对的集合。我们可以使用Iterator遍历这个集合来遍历Map所有的键和对应的值: ```java Iterator<Map.Entry<String, Integer>> iterator = ageMap.entrySet().iterator(); while(iterator.hasNext()) { Map.Entry<String, Integer> entry = iterator.next(); String name = entry.getKey(); int age = entry.getValue(); System.out.println(name + " is " + age + " years old."); } ``` ### values方法 values方法返回一个Collection集合,其包含了Map所有值的集合。我们可以使用foreach遍历这个集合来遍历Map所有的值: ```java for(int age : ageMap.values()) { System.out.println("Someone is " + age + " years old."); } ``` 综上所述,我们可以使用put等方法Map添加键值对,使用get方法通过键来获取对应的值,使用keySet方法、entrySet方法和values方法遍历Map的键和值。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

青山孤客

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值