package newFeatures8;
import java.util.IdentityHashMap;
/**
*
* @author ljh
*java API 中说此类的典型用法是拓扑保留对象图形转换,如序列化或深层复制。
*要执行这样的转换,程序必须维护用于跟踪所有已处理对象引用的“节点表”。
*节点表一定不等于不同对象,即使它们偶然相等也如此。此类的另一种典型用法是维护代理对象。
*例如,调试设施可能希望为正在调试程序中的每个对象维护代理对象。
*@description
* 其实我也很想知道使用IdentityHashMap如何进行序列化或是深层复制
* 其他的博主也是一笔带过,只是说了一下与HashMap的区别
*/
/*
* 两者最主要的区别是IdentityHashMap使用的是==比较key的值,而HashMap使用的是equals()
HashMap使用的是hashCode()查找位置,IdentityHashMap使用的是System.identityHashCode(object)
IdentityHashMap理论上来说速度要比HashMap快一点
另外一点呢就是IdentityHashMap中key能重复,但需要注意一点的是key比较的方法是==,
所以若要存放两个相同的key,就需要存放不同的地址,下面用代码来说明:*/
/*
* 举个例子,jvm中的所有对象都是独一无二的,哪怕两个对象是同一个class的对象,
* 而且两个对象的数据完全相同,对于jvm来说,他们也是完全不同的,如果要用一个map来记录这样jvm中的对象,
* 你就需要用IdentityHashMap,而不能使用其他Map实现。
* */
public class IdentityHashMapDemo {
public static void main(String[] args) {
IdentityHashMap<String,String> identityHashMap=new IdentityHashMap<>();
identityHashMap.put("2", "李四");
identityHashMap.put("3", "王五");
identityHashMap.put("4", "赵六");
identityHashMap.put("5", "田七");
identityHashMap.put("1", "张三");//有相同键时,使用get方法获取的是第一个
identityHashMap.put(new String("1"), "田七");
System.out.println(identityHashMap.toString());
}
}