彻底来理解下hashmap吧

1.什么叫hashmap?

答:首先是一种map集合,其次呢,它是一种利用hash表来存储的数据结构。所以叫hashmap.

2.hashmap的特点是什么?

答:hashmap的特点是key值不能重复,否则根据key,可以读取到多个对应的value了啊。

3.那么怎么保证map的key不能重复呢?

答:很简单,利用hashcode值是每个对象的一种状态这个属性来区分每个一个对象就行了嘛。

hashcode值是每个对象的一种状态值。

利用hash算法来计算得出的一种码值,hash算法要传入参数,这个传入的不同参数,决定了hashcode值得最终结果啊。

比如,string,Integer这种封装类,已经重写了hashcode()这个方法,指定了利用string/integer具体的内容来进行hashcode算法传参。

所以string值一样,那么这几个string对象的hashcode值夜一样。

这就可以将string作为map的key啊,保证了key不重复。因为hashmap,底层实现原理是判断传入key的hashcode值来防止重复对象的。

4.而普通Object类,默认的计算hacode值得方法hashcode()默认将对象的内存地址传参,进行hashcode值计算的。每个对象的内存地址当然都不一样啊,所以hasshcode也都不一样。即使内容相同的两个对象,由于内存地址不一样,而默认的hashcode()方法是计算内存地址传参的,也造成 了,依然可以放入hashmap中。

时间: 2024-12-18 14:02:47

彻底来理解下hashmap吧的相关文章

多线程下HashMap的死循环问题

多线程下[HashMap]的问题: 1.多线程put操作后,get操作导致死循环. 2.多线程put非NULL元素后,get操作得到NULL值. 3.多线程put操作,导致元素丢失. 本次主要关注[HashMap]-死循环问题. 为何出现死循环? 大家都知道,HashMap采用链表解决Hash冲突,具体的HashMap的分析可以参考一下Java集合---HashMap源码剖析 的分析.因为是链表结构,那么就很容易形成闭合的链路,这样在循环的时候只要有线程对这个HashMap进行get操作就会产生

深刻理解下js的prototype

参考 http://aralejs.org/class/docs/competitors.html, http://www.iteye.com/topic/248933,http://www.cnblogs.com/qiantuwuliang/archive/2011/01/08/1930548.html 1.使用Dog.prototype.__proto__ ? 1 2 3 4 5 6 7 8 9 10 11 function Animal() {} function Dog() {} //

【转】Android事件分发机制完全解析,带你从源码的角度彻底理解(下)

转载请注明出处:http://blog.csdn.net/guolin_blog/article/details/9153761 记得在前面的文章中,我带大家一起从源码的角度分析了Android中View的事件分发机制,相信阅读过的朋友对View的事件分发已经有比较深刻的理解了. 还未阅读过的朋友,请先参考 Android事件分发机制完全解析,带你从源码的角度彻底理解(上) . 那么今天我们将继续上次未完成的话题,从源码的角度分析ViewGruop的事件分发. 首先我们来探讨一下,什么是View

试着理解下kvm

kvm,一台物理机,一个操作系统,在这个操作系统中隔离,这是docker: 反思:一个物理机上只能有一个操作系统系统存在么?操作系统无非是一套软件而已,在特殊的偏移地址上: 为啥一台物理机上不能驻扎两个操作系统?!(振聋发聩的一问) 我们想想如果有两个操作系统会发生啥事情. 1)进程执行层面:我们通过fork去执行一个进程,然后这个进程开始在自己的虚拟地址执行执行执行,在用户态都好好的,但是一旦要访问系统的硬件资源,就需要陷入到内核里,使用int3,使用trap,然后操作系统这里会陷入到0xff

MVP模式(2) 你真的理解下抽象类和接口吗??

转载请注明出处:王亟亟的大牛之路 礼拜5下午,有一些小伙伴在讨论关于"我对MVP的理解啊","我对RxJava,RxAndroid的理解啊"等等.在交流中发现,其实我们往往在实际开发中有意无意的都可能出现某个类特别的繁杂,代码特别的多,而且其实很多都是重复的,但是又没有办法,诸如一大堆回调. 可能在项目构建之初,想着我要如何如何去实现,如何如何优化代码结构,逻辑等等,可是因为理解或者业务繁重等各个因素,导致到后来还是挤成一坨龙猫,像这样(麦麦胖的脚都看不见了,臃肿,

多线程下HashMap与Hashtable

最近在多线程环境下操作HashMap,在程序中执行最多的是“查询”,但同时也要维护数据的“添加”和“删除” 早在开发前就知道Hashtable是同步的,而HashMap是异步的. 好吧在这里承认错误:限于没有犯过这个错误也没有见过实例场景,开发前未做好评估 现在说说我的这次需求吧: 1.要求新增一个功能页面,点击功能按钮弹出页面 2.页面前后台校验器两个(在这里不做追述) 3.提交修改后,提交按钮并disabled该按钮,页面特定区域显示动态Loading图标,并要求不影响主功能进程,若关闭弹出

关于new HashMap<>(1)中1的理解(hashMap的加载因子)

新入公司,阅读代码的时候发现了一行代码,为 Map<String, String> map=new HashMap<>(1); 对于这个括号里面的1不能理解,于是查了资料,大概了解了. 解释如下:这个1被称为加载因子. API: /** * Constructs an empty <tt>HashMap</tt> with the specified initial * capacity and the default load factor (0.75).

跟着Innost理解下Android控件(ViewRoot)系统

Android的控件系统的作用是封装了: · 测量各个UI元素(一段文字.一个图片)的显示尺寸与位置. · 对各个UI元素进行布局计算与绘制. · 当显示内容需要发生变化时进行重绘.出于效率考虑,必须保证重绘区域尽可能地小. · 分析InputEventReceiver所接收的事件的类型,并确定应该由哪个UI元素响应这个事件. · 处理来自WMS的很多与窗口状态相关的回调. 1. Activity控件系统的架构 1.1 Activity控件系统的层级结构 对于一个Activity来说: · 它包

[转载]Laravel Container (容器) 深入理解 (下)

本文大部分翻译自 DAVE JAMES MILLER 的 <Laravel's Dependency Injection Container in Depth> . 上文介绍了 Dependency Injection Containers (容器) 的基本概念,现在接着深入讲解 Laravel 的 Container. Laravel 中实现的 Inversion of Control (IoC) / Dependency Injection (DI) Container 非常强悍,但文档中