Java HashMap

Java HashMape教程

HashMap 是 Map 的子类。是以 key value 形式存储在 Map 对象里面的。HashMap 是无序存放的,key 不允许重复。

Java HashMap

说明

HashMap 是最常用的 key value 值存储的对象。它是一个 Node 对象。在添加的时候,会根据 key 的 hash 值来找对应存放的位置。它的底层原理如图:

11 hashMap Node节点.png

12 hashMap 底层原理.png

最上层是一个 table 数组,每个 key 的 hash 值经过计算,会得到对应的 table 数组上面。如果 table 数组上面有元素,就向元素的后面追加,如果没有,直接填充在数组里面。

案例

package com.haicoder.net.map; import java.util.HashMap; import java.util.Iterator; import java.util.Map; import java.util.Set; public class HashMapTest { public static void main(String[] args) { System.out.println("嗨客网(www.haicoder.net)"); Map<String, String> strMap = new HashMap(); //添加元素 strMap.put("嗨客网", "www.haicoder.net"); strMap.put("年龄", "100岁"); System.out.println("strMap 内容为:" + strMap); System.out.println("判断 嗨客网 的 key 是否存在 : " + strMap.keySet().contains("嗨客网")); System.out.println("判断 嗨客 的 key 是否存在 : " + strMap.keySet().contains("嗨客")); System.out.println("判断 www.haicoder.net 的 value 是否存在 : " + strMap.values().contains("www.haicoder.net")); System.out.println("判断 嗨客 的 value 是否存在 : " + strMap.values().contains("嗨客")); System.out.println("===========hashMap 遍历============="); Set<String> keySet = strMap.keySet(); Iterator<String> keyIterator = keySet.iterator(); //遍历 set 集合 while (keyIterator.hasNext()) { String tmpKey = keyIterator.next(); System.out.print("key 为 :" + tmpKey); System.out.print(" 值为:" + strMap.get(tmpKey)); System.out.println(""); } System.out.println("strMap 内容为:" + strMap); strMap.put("年龄", "200岁"); System.out.println("strMap 内容为:" + strMap); } }

运行结果如下:

13 HashMap 案例.png

我们可以看到,HashMap 的 key 值全部输出时是一个 Set 集合,它的 key 是不能重复的,如果在给 Map 赋值的时候 key 已经存在,那么会用当前的值将原来的值覆盖。

Java HashTable

HashTable 与 HashMap 的函数操作基本是一样的,它们的区别点在于:

区别点 HashMap HashTable
性能 性能高 同步方式,性能低
线程安全 非线程安全的操作 线程安全的操作
key 为 null 可以将 key 设置为 空 不允许将key 设置为空

Java HashMap总结

存放键值对的操作,平时在编码过程中 HashMap 用的比较多。它里面存储的元素是 Node 节点。HashMap 的存放是无序的。在存储数据的过程中,如果 key 重复,那么就会将之前的值覆盖,始终保留新添加的数据。