Country other = (Country) obj;
<span class="hljs-keyword">if (name.equalsIgnoreCase((other.name)))
<span class="hljs-keyword">return <span class="hljs-keyword">true;
<span class="hljs-keyword">return <span class="hljs-keyword">false;
}
}
2. HashMapStructure.java(main class)
<span class="hljs-comment">/**
* @author Arpit Mandliya
*/
<span class="hljs-keyword">public <span class="hljs-keyword">static <span class="hljs-built_in">void main(<span class="hljs-built_in">String[] args) {
Country india=<span class="hljs-keyword">new Country(<span class="hljs-string">"India",<span class="hljs-number">1000);
Country japan=<span class="hljs-keyword">new Country(<span class="hljs-string">"Japan",<span class="hljs-number">10000);
Country france=<span class="hljs-keyword">new Country(<span class="hljs-string">"France",<span class="hljs-number">2000);
Country russia=<span class="hljs-keyword">new Country(<span class="hljs-string">"Russia",<span class="hljs-number">20000);
HashMap<country,<span class="hljs-built_in">string> countryCapitalMap=<span class="hljs-keyword">new HashMap<country,<span class="hljs-built_in">string>();
countryCapitalMap.put(india,<span class="hljs-string">"Delhi");
countryCapitalMap.put(japan,<span class="hljs-string">"Tokyo");
countryCapitalMap.put(france,<span class="hljs-string">"Paris");
countryCapitalMap.put(russia,<span class="hljs-string">"Moscow");
Iterator<country> countryCapitalIter=countryCapitalMap.keySet().iterator();<span class="hljs-comment">//put debug point at this line
<span class="hljs-keyword">while(countryCapitalIter.hasNext())
{
Country countryObj=countryCapitalIter.next();
<span class="hljs-built_in">String capital=countryCapitalMap.get(countryObj);
System.out.println(countryObj.getName()+<span class="hljs-string">"----"+capital);
}
}
}
此刻,在第23行配置一个断点,在项目上右击->调试运行(debug as)->java应用(java application)。措施会停在23行,然后在countryCapitalMap上右击,选择“查察”(watch)。将会看到如下的布局:

从上图可以调查到以下几点:
1. 有一个叫做table巨细是16的Entry数组。
2. 这个table数组存储了Entry类的工具。HashMap类有一个叫做Entry的内部类。这个Entry类包括了key-value作为实例变量。我们来看下Entry类的布局。Entry类的布局:
3. 每当往hashmap内里存放key-value对的时辰,城市为它们实例化一个Entry工具,这个Entry工具就会存储在前面提到的Entry数组table中。此刻你必然很想知道,上面建设的Entry工具将会存放在详细哪个位置(在table中的准确位置)。谜底就是,按照key的hashcode()要领计较出来的hash值(来抉择)。hash值用来计较key在Entry数组的索引。
4. 此刻,假如你看下上图中数组的索引10,它有一个叫做HashMap$Entry的Entry工具。
5. 我们往hashmap放了4个key-value对,可是看上去仿佛只有2个元素!!!这是由于,假如两个元素有沟通的hashcode,它们会被放在统一个索引上。题目呈现了,该怎么放呢?原本它是以链表(LinkedList)的情势来存储的(逻辑上)。
上面的country工具的key-value的hash值是怎样计较出来的。
Japan的Hash值是95,它的长度是奇数。?India的Hash值是95,它的长度是奇数。?Russia的Hash值是31,它的长度是偶数。?France,它的长度是偶数。??
下图会清楚的从观念上表明下链表。

以是,此刻若是你已经很好地相识了hashmap的布局,让我们看下put和get要领。
Put : (编辑:湖南网)
【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!
|