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

19 篇文章 0 订阅
4 篇文章 0 订阅


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


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值