HashMap和IdentifyHashMap是Java中两个常见的Map类,对这两个类感兴趣的可以去看他们的源码。在这里只说他们的区别。
HashMap类判断键k1和k2相等的条件为 (k1==null?k2==null:k1.equals(k2))==true
IdentifyHashMap判断k1和k2相等的条件是(k1==k2)
来看下面的代码:
import java.util.HashMap;
import java.util.IdentityHashMap;
import java.util.Map;
/**
* Created by yizhen on 17-3-28.
*/
public class G {
public static void main(String[] args) {
{
Map<String, Integer> map = new HashMap<>();
map.put("a", 1);
map.put("a", 2);
map.put(new String("a"), 3);
map.put(new String("a"), 4);
System.out.println(map);
}
{
Map<Key,Integer> map=new HashMap<>();
map.put(new Key(),1);
map.put(new Key(),2);
System.out.println(map);
}
{
Map<String, Integer> map = new IdentityHashMap<>();
map.put("a", 1);
map.put("a", 2);
map.put(new String("a"), 3);
map.put(new String("a"), 4);
System.out.println(map);
}
}
}
class Key{}
这段代码的输出是:
{a=4}
{Key@48ec77cb=1,Key@1cacd5d4=2}
{a=4,a=3,a=2}
笔者开设了一个知乎live,详细的介绍的JAVA从入门到精通该如何学,学什么?
提供给想深入学习和提高JAVA能力的同学,欢迎收听https://www.zhihu.com/lives/932192204248682496
提供给想学习云计算的同学,欢迎收听https://www.zhihu.com/lives/1046567982750281728