Wetts's blog

Stay Hungry, Stay Foolish.

0%

Java-API-容器-map.md

  • HashMap是一个最常用的 Map,它根据键的 hashCode 值存储数据,根据键可以直接获取它的值,具有很快的访问速度。HashMap 最多只允许一条记录的键为 NULL,允许多条记录的值为 NULL。

  • HashMap 不支持线程同步,即任一时刻可以有多个线程同时写 HashMap,可能会导致数据的不一致性。如果需要同步,可以用 Collections 的 synchronizedMap 方法使 HashMap 具有同步的能力。

  • Hashtable 与 HashMap 类似,不同的是:它不允许记录的键或者值为空;它支持线程的同步,即任一时刻只有一个线程能写 Hashtable,因此也导致了 Hashtable 在写入时会比较慢。

  • LinkedHashMap 保存了记录的插入顺序,在用 Iterator 遍历 LinkedHashMap 时,先得到的记录肯定是先插入的。在遍历的时候会比 HashMap 慢,不过有种情况例外,当 HashMap 容量很大,实际数据较少时,遍历起来可能会比 LinkedHashMap 慢,因为 LinkedHashMap 的遍历速度只和实际数据有关,和容量无关,而 HashMap 的遍历速度和他的容量有关。

  • TreeMap 能够把它保存的记录根据键排序,默认是按升序排序,也可以指定排序的比较器。当用 Iterator 遍历 TreeMap 时,得到的记录是排过序的。