设为首页 - 加入收藏 ASP站长网(Aspzz.Cn)- 科技、建站、经验、云计算、5G、大数据,站长网!
热搜: 创业者 数据 手机
当前位置: 首页 > 运营中心 > 交互 > 正文

Java HashMap的工作原理

发布时间:2020-12-31 06:34 所属栏目:31 来源:网络整理
导读:面试的时候经常会遇见诸如:“java中的HashMap是怎么工作的”,“HashMap的get和put内部的工作原理”这样的问题。本文将用一个简单的例子来解释下HashMap内部的工作原理。首先我们从一个例子开始,而不仅仅是从理论上,这样,有助于更好地理解,然后,我们来

面试的时候经常会遇见诸如:“java中的HashMap是怎么工作的”,“HashMap的get和put内部的工作原理”这样的问题。本文将用一个简单的例子来解释下HashMap内部的工作原理。首先我们从一个例子开始,而不仅仅是从理论上,这样,有助于更好地理解,然后,我们来看下get和put到底是怎样工作的。

我们来看个非常简单的例子。有一个”国家”(Country)类,我们将要用Country对象作为key,它的首都的名字(String类型)作为value。下面的例子有助于我们理解key-value对在HashMap中是如何存储的。

1.?Country.java

<span class="hljs-keyword">long population;

<span class="hljs-function"><span class="hljs-keyword"><span class="hljs-function"><span class="hljs-keyword">public<span class="hljs-function"> <span class="hljs-title"><span class="hljs-function"><span class="hljs-title">Country<span class="hljs-params"><span class="hljs-function"><span class="hljs-params">(String name,<span class="hljs-keyword"><span class="hljs-function"><span class="hljs-params"><span class="hljs-keyword">long<span class="hljs-function"><span class="hljs-params"> population)<span class="hljs-function"> {
<span class="hljs-keyword">super();
<span class="hljs-keyword">this.name = name;
<span class="hljs-keyword">this.population = population;
}
<span class="hljs-function"><span class="hljs-keyword"><span class="hljs-function"><span class="hljs-keyword">public<span class="hljs-function"> String <span class="hljs-title"><span class="hljs-function"><span class="hljs-title">getName<span class="hljs-params"><span class="hljs-function"><span class="hljs-params">()<span class="hljs-function"> {
<span class="hljs-keyword">return name;
}
<span class="hljs-function"><span class="hljs-keyword"><span class="hljs-function"><span class="hljs-keyword">public<span class="hljs-function"> <span class="hljs-keyword"><span class="hljs-function"><span class="hljs-keyword">void<span class="hljs-function"> <span class="hljs-title"><span class="hljs-function"><span class="hljs-title">setName<span class="hljs-params"><span class="hljs-function"><span class="hljs-params">(String name)<span class="hljs-function"> {
<span class="hljs-keyword">this.name = name;
}
<span class="hljs-function"><span class="hljs-keyword"><span class="hljs-function"><span class="hljs-keyword">public<span class="hljs-function"> <span class="hljs-keyword"><span class="hljs-function"><span class="hljs-keyword">long<span class="hljs-function"> <span class="hljs-title"><span class="hljs-function"><span class="hljs-title">getPopulation<span class="hljs-params"><span class="hljs-function"><span class="hljs-params">()<span class="hljs-function"> {
<span class="hljs-keyword">return population;
}
<span class="hljs-function"><span class="hljs-keyword"><span class="hljs-function"><span class="hljs-keyword">public<span class="hljs-function"> <span class="hljs-keyword"><span class="hljs-function"><span class="hljs-keyword">void<span class="hljs-function"> <span class="hljs-title"><span class="hljs-function"><span class="hljs-title">setPopulation<span class="hljs-params"><span class="hljs-function"><span class="hljs-params">(<span class="hljs-keyword"><span class="hljs-function"><span class="hljs-params"><span class="hljs-keyword">long<span class="hljs-function"><span class="hljs-params"> population)<span class="hljs-function"> {
<span class="hljs-keyword">this.population = population;
}

<span class="hljs-comment">// If length of name in country object is even then return 31(any random number) and if odd then return 95(any random number).
<span class="hljs-comment">// This is not a good practice to generate hashcode as below method but I am doing so to give better and easy understanding of hashmap.
<span class="hljs-meta">@Override
<span class="hljs-function"><span class="hljs-keyword"><span class="hljs-function"><span class="hljs-keyword">public<span class="hljs-function"> <span class="hljs-keyword"><span class="hljs-function"><span class="hljs-keyword">int<span class="hljs-function"> <span class="hljs-title"><span class="hljs-function"><span class="hljs-title">hashCode<span class="hljs-params"><span class="hljs-function"><span class="hljs-params">()<span class="hljs-function"> {
<span class="hljs-keyword">if(<span class="hljs-keyword">this.name.length()%<span class="hljs-number">2==<span class="hljs-number">0)
<span class="hljs-keyword">return <span class="hljs-number">31;
<span class="hljs-keyword">else
<span class="hljs-keyword">return <span class="hljs-number">95;
}
<span class="hljs-meta">@Override
<span class="hljs-function"><span class="hljs-keyword"><span class="hljs-function"><span class="hljs-keyword">public<span class="hljs-function"> <span class="hljs-keyword"><span class="hljs-function"><span class="hljs-keyword">boolean<span class="hljs-function"> <span class="hljs-title"><span class="hljs-function"><span class="hljs-title">equals<span class="hljs-params"><span class="hljs-function"><span class="hljs-params">(Object obj)<span class="hljs-function"> {

(编辑:ASP站长网)

网友评论
推荐文章
    热点阅读