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的顺序输出。

输出结果:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

青山孤客

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

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

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

打赏作者

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

抵扣说明:

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

余额充值