有谁知道使用IdentityHashMap如何进行序列化或是深层复制吗?

来源:互联网 发布:js集合和数组 编辑:程序博客网 时间:2024/06/14 03:01


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());}}