🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
>[info] 在读此节前,建议先看看:[深入浅出学Java—HashMap](https://blog.csdn.net/woshimaxiao1/article/details/83661464) > 提示:没必要精通,懂HashMap的基本原理即可 ## **Map常用的有HashMap(LinkedHashMap )、TreeMap,其大致一样** ~~~ import java.util.*; public class Map { public static void mapTest(){ /** * HashMap、TreeMap两种Map储存数据结构不一样,但是存储的数据是一样的,可以通过去掉注释来切换 * 其中: * HashMap 不一定会按照放进去的顺序排序 * TreeMap 会按照Key进行排序 * LinkedHashMap 会按照放进去的顺序排序,因为他是一个链表 * */ // HashMap<String, String> map = new HashMap <>(); // HashMap以以下顺序输出:{张三=湖北武汉, 大西=黑龙江哈尔滨, 小明=广州中山, 小张=北京海淀} // 没有顺序 //TreeMap <String, String> map = new TreeMap <>(); // TreeMap以以下顺序输出:{大西=黑龙江哈尔滨, 小张=北京海淀, 小明=广州中山, 张三=湖北武汉} // 排序方法是key的 A-Z LinkedHashMap<String, String> map = new LinkedHashMap <>(); // LinkedHashMap以以下顺序输出:{小明=广州中山, 小张=北京海淀, 大西=黑龙江哈尔滨, 张三=湖北武汉} // 顺序是我们放进去的顺序 // tip:Map中的key值是唯一的,如果放相同key的数据则会复写 map.put("小明", "广州中山"); map.put("小张", "北京海淀"); map.put("大西", "黑龙江哈尔滨"); map.put("张三", "湖北武汉"); /** * 一样的方法(Api) */ System.out.println(map); // 通过Key取值 String value = map.get("小明"); System.out.println(value); // 判断是否有某个key boolean isSet = map.containsKey("小李"); System.out.println(isSet); // 判断是否有某个value isSet = map.containsValue("广州中山"); System.out.println(isSet); // 获取map长度 int size = map.size(); System.out.println(size); // 获取map所有的key Set <String> allKeys = map.keySet(); System.out.println(allKeys); // 获取map所有的value Collection <String> allValues = map.values(); System.out.println(allValues); // 这个较难:把map转换为entrySet数据格式 Set<java.util.Map.Entry<String ,String >> entrySet = map.entrySet(); System.out.println(entrySet); for (java.util.Map.Entry entry: entrySet){ System.out.println("key = " + entry.getKey() + ";value = " + entry.getValue()); } // 清除Map里的内容 map.clear(); System.out.println(map); } } ~~~ <br/> ## **我们如何选择使用哪种Map的数据结构?** * HashMap可以实现快速存储和检索,但缺点是包含的数据是无序的,适用于在Map中插入、删除和定位元素,**如果对数据顺序没有要求的话可以优先使用HashMap**; * TreeMap可以实现内部元素的排序,但性能比HashMap更差,适用于输出按照排序的数据体。 * JDK1.7和1.8中HashMap的区别: * 底层实现由 “数组+链表” 改为 “数组+链表+红黑树” * 当链表节点较少时仍以链表存在,链表节点较多时,会转为红黑 ~~~java 摘自:java.util.HashMap#TREEIFY_THRESHOLD /** * The bin count threshold for using a tree rather than list for a * bin. Bins are converted to trees when adding an element to a * bin with at least this many nodes. The value must be greater * than 2 and should be at least 8 to mesh with assumptions in * tree removal about conversion back to plain bins upon * shrinkage. */ static final int TREEIFY_THRESHOLD = 8; ~~~