HashMap遍历效率问题

本文介绍了两种遍历HashMap的方法:一种是通过keySet()获取键集合并遍历;另一种是使用entrySet()获取键值对集合并遍历。后者效率更高但占用更多内存。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

对于HashMap中的Key和Value的遍历有两种方法:

1.通过HashMap.keySet()方法返回key的集合,通过遍历该集合的key得到相应的value值。

Map map = new HashMap();

Iterator iter = map.keySet().iterator();

while (iter.hasNext()) {

Object key = iter.next();

Object val = map.get(key);

}

2.通过HashMap.entrySet()方法返回整个Entry<K,V>对象的集合,遍历该集合中的每一个键值对Map.Entry类型,Entry.getValue() Entry.getKey()得到相应的值和键。

Map map = new HashMap();

Iterator iter = map.entrySet().iterator();

while (iter.hasNext()) {

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

Object key = entry.getKey();

Object val = entry.getValue();

}

两种方法虽然可以得到相同的结果,但是在效率上还是存在差别。

因为在第一种方式中遍历每一个key并通过HashMap.get(object key)来得到相应的值时,实际上这个过程会再次去遍历整个Entry 集合,以下是HashMap中的JDK1.6源码:

public V get(Object key) {

        if (key == null)

            return getForNullKey();

        int hash = hash(key.hashCode());

        for (Entry<K,V> e = table[indexFor(hash, table.length)];

             e != null;

             e = e.next) {

            Object k;

            if (e.hash == hash && ((k = e.key) == key || key.equals(k)))

                return e.value;

        }

        return null;

    }

 

因此第二种方法的效率会要高一些,经过测试发现的确也是这样的。

两个方法还有一个区别就是:第二种方法明显的要耗费更多的内存,因为Entry<K,V>肯定会比单独的Set<K>要大。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值