java HashMap,TreeMap 与 LinkedHashMap 的详解
这里有新鲜出炉的 Java 函数式编程, 程序狗速度看过来!
Java 程序设计语言
java 是一种可以撰写跨平台应用软件的面向对象的程序设计语言, 是由 Sun Microsystems 公司于 1995 年 5 月推出的 Java 程序设计语言和 Java 平台 (即 JavaEE(j2ee), JavaME(j2me), JavaSE(j2se)) 的总称
这篇文章主要介绍了 java HashMap,TreeMap 与 LinkedHashMap 的详解的相关资料, 这里提供实例代码, 帮助大家学习理解 这部分的内容, 需要的朋友可以参考下
java HashMap,TreeMap 与 LinkedHashMap 的详解
今天上午面试的时候 问到了 Java,Map 相关的事情, 我记错了 HashMap 和 TreeMap 相关的内容, 回来赶紧尝试了几个 demo 理解下
- package Map;
- import java.util. * ;
- public class HashMaps {
- public static void main(String[] args) {
- Map map = new HashMap();
- map.put("a", "aaa");
- map.put("b", "bbb");
- map.put("c", "ccc");
- map.put("d", "ddd");
- Iterator iterator = map.keySet().iterator();
- while (iterator.hasNext()) {
- Object key = iterator.next();
- System.out.println("map.get(key) is :" + map.get(key));
- }
- Hashtable tab = new Hashtable();
- tab.put("a", "aaa");
- tab.put("b", "bbb");
- tab.put("c", "ccc");
- tab.put("d", "ddd");
- Iterator iterator_1 = tab.keySet().iterator();
- while (iterator_1.hasNext()) {
- Object key = iterator_1.next();
- System.out.println("tab.get(key) is :" + tab.get(key));
- }
- TreeMap tmp = new TreeMap();
- tmp.put("a", "aaa");
- tmp.put("b", "bbb");
- tmp.put("c", "ccc");
- tmp.put("d", "ddd");
- tmp.put("a", "aba");
- Iterator iterator_2 = tmp.keySet().iterator();
- while (iterator_2.hasNext()) {
- Object key = iterator_2.next();
- System.out.println("tmp.get(key) is :" + tmp.get(key));
- }
- LinkedHashMap < String,
- Integer > linkedHashMap = new LinkedHashMap < String,
- Integer > ();
- linkedHashMap.put("dasdsa", 1);
- linkedHashMap.put("gdsf", 2);
- linkedHashMap.put("texvdfd", 3);
- linkedHashMap.put("bdada", 4);
- linkedHashMap.put("gdsf", 3);
- for (String temp: linkedHashMap.keySet()) {
- System.out.println(temp);
- }
- }
- }
Map 不同于 List, 底层使用 键值对的形式存储数据 Map.Entry 是内部的一个子条目, Map 的不同实现 对键值对的索引方案不同
HashMap 本身是用 hash 函数对键值做索引 我们不能确定最后键值的顺序
但是存在一个有趣的现象 就是在以 Integer 作为键值对的时候, 当位数为 1 位时 键值是按照从小到大排的, 位数上升到两位的时候 就可能存在问题
TreeMap 内部存在着一个平衡树来存储着键值索引, TreeMap 把键值按照比较函数排序, 我推测内部是可能存在着一个 AVLtree
LinkedHashMap 这个存在着一个特性是, 键值对是按照插入顺序排序的, 如果存在着重复插入, 以首次插入的顺序来记, 网上的一种说法是该结构内部存在着 2 重 hash
一个解决顺序问题, 一个解决存储问题, 正确性待确认
HashMap 和 TreeMap 是最常用的两种 Map 结构, 一般来说 HashMap 的效率比较高, 也最为常见, 如果我们需要键值有序的话, 我们才会用到 TreeMap
来源: http://www.phperz.com/article/18/0211/359307.html