在有些特定的场景下,我们需要使用到有序的键值对——LinkedHashMap
比如我下面的场景,要求添加ip+端口号的键值对,同时接口要求端口从0开始。
我们比较一下haspMap和LinkedHashMap的区别,直接看代码结果:
public static void main(String[] args) {
//-------HashMap
Map<String,Integer> map=new HashMap<>();
map.put("127.0.0.1",0);
map.put("127.0.0.2",1);
map.put("127.0.0.3",2);
map.put("127.0.0.4",3);
Set<String> ips = map.keySet();
for (String ip :ips ) {
Integer port = map.get(ip);
System.out.println("key:"+ip+"----------value:"+port);
}
System.out.println("--------------------------------------");
//-------LinkedHashMap
Map<String,Integer> linkMap=new LinkedHashMap();
linkMap.put("127.0.0.1",0);
linkMap.put("127.0.0.2",1);
linkMap.put("127.0.0.3",2);
linkMap.put("127.0.0.4",3);
Set<String> ips2 = linkMap.keySet();
for (String ip :ips2 ) {
Integer port = linkMap.get(ip);
System.out.println("key:"+ip+"===========value:"+port);
}
}
结果:
结果明显HaspMap根据输出是无序的,而LindedHashMap输出是有序的。
看了一下LindedHashMap的实现:
他底层也是用的哈希表,还用了链表作为排序,所以产生的结果对比HaspMap多个顺序