基于的 Map 接口的实现。此实现提供所有可选的映射操作,并允许使用 null 值和 null 键。(除了非同步和允许使用 null 之外,HashMap 类与 Hashtable 大致相同,Hashtable因效率问题已经不提倡使用,所以现在都是使用HashMap比较多);
存储特性:
hashMap不保证映射的顺序,特别是它不保证该顺序恒久不变,即元素的排列顺序不是固定的;HashMap的主干是一个Entry(可看作键值对,方便理解)数组,Entry是HashMap的组成单位,而每一个Entry都包含一个 key-value键值对;
键值对的类型如:HashMap<Integer, String>;表示键是Integer型,值是String型;
hashMap的使用:
- 可以为key和value添加null;
- 可以添加相同的key值,但是value会被后面的覆盖掉;
- Value可以相同;
- 元素排序不固定;
为hashMap添加键值对后,如何取值呢?
有3种常用的方法:
第一种:通过遍历key获取value;
第一种输出格式:
第二种:直接输出Map集合;
第二种输出格式:
第三种:直接给定key值获取value
常用的Map方法:
下面了解一下hashMap如何进行排序,因为hashMap本身是无顺序的集合,如果想排序必须要把集合转换为其他的集合,如:
因为每个集合都有它特殊之处,下面就是利用各种集合的特性去排序;
思路:HashMap—--->listhashOne(进行排序)—--->LinkedHashMap(顺序存储);
把值添加到HashMap:
转化为listhashOne集合并且排序:
利用LinkedHashMap可顺序存储的特点,把已经排序好的listhashOne存储到LinkedHashMap中;
最后把排序好的LinkedHashMap遍历出来即可得到排序好的键值对了;
运行结果图:
return o2.getKey()-(o1.getKey());--- 表示降序;
return o1.getKey()-(o2.getKey());--- 表示升序;
注意:在这里排序的时候,key不能为空进行比较,否则报null异常,所有要进行非空判断;
温馨提示:要排序建议不要用hashMap,直接用treeMap方便省事,一步到位;这里只是应对前面已经用了hashMap进行存储键值对,无法进行更改,但是又需要进行排序,才出此下策;