map和hashmap

9 篇文章 0 订阅

C++

1.C++的map容器和使用技巧

http://www.cnblogs.com/anywei/archive/2011/10/27/2226830.html


2.C++中hashmap的介绍

http://blog.chinaunix.net/uid-20773165-id-1847822.html

map和hashmap还是有区别的。

hash_map和map的区别在哪里?

  • 构造函数。hash_map需要hash函数,等于函数;map只需要比较函数(小于函数).
  • 存储结构。hash_map采用hash表存储,map一般采用红黑树(RB Tree)实现。因此其memory数据结构是不一样的。

什么时候需要用hash_map,什么时候需要用map?

总体来说,hash_map 查找速度会比map快,而且查找速度基本和数据数据量大小,属于常数级别;而map的查找速度是log(n)级别。并不一定常数就比log(n)小,hash还有hash函数的耗时,明白了吧,如果你考虑效率,特别是在元素达到一定数量级时,考虑考虑hash_map。但若你对内存使用特别严格,希望程序尽可能少消耗内存,那么一定要小心,hash_map可能会让你陷入尴尬,特别是当你的hash_map对象特别多时,你就更无法控制了,而且hash_map的构造速度较慢。

现在知道如何选择了吗?权衡三个因素: 查找速度, 数据量, 内存使用。



Java

3.Java中Hashmap实现原理分析

http://blog.csdn.net/vking_wang/article/details/14166593

数组的特点是,寻址容易,但是插入和删除困难。因为它需要移动被修改元素后面的若干元素位置。

链表的特点是,寻址困难,但是插入和删除容易。

Hashmap就是中和了数组和链表的有点,找到了一个寻址容易同时插入删除也容易的方法,它采用的是数组+链表的实现方式。

HashMap里面有一个静态内部类,重要的属性有key,value和next..Hashmap的基础就是一个线性数组,这个数组就是Entry[],Map的内容存放在Entry[]里面。

在一个长度为len的数组中,每一个元素存放的是一个链表的头结点。这些元素是通过什么样的方式存放在数组中呢?一般是通过取模的方式,key%len获得。

如何对hashmap进行存取呢?

如果两个key通过key%len获得的数组index相同,会不会覆盖?不会。Entry类中有一个next属性,作用是指向下一个Entry.比如说第一个键值对A进来,通过该计算key的hash得到数组的Index=0,则Entry[0]=A。如果一会又来一个键值对B,通过计算Index同样也是0,那么Hashmap会这么做:B.next=A,Entry[0]=B.这样通过next,就将所有的键值对串联起来了,形成了一个链表。



4.Java中hashmap的两种遍历方式(Entryset 和keyset),entryset的效率更好



5.在java中map是一个接口,而hashmap是一个类,它实现了map所有的方法






  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值