首先这里不讲ConCurrentHashMap的实现以及和HashMap的区别。因为网上随便一搜ConCurrentHashMap就有一堆的文章。
这里只记录一个心得:在Intent中传递ConCurrentHashMap时。接收方无法通过简单的强制类型转换(类似HashMap在Intent中的获取)来接收到ConCurrentHashMap。如下:
class ActivityA extends Activity{
ConCurrentHashMap < String , String >map = new ConCurrentHashMap();
。。。。。。
private void mothedA(){
Intent i = new Intent(this,ActivityB.class);
i.putExtra("EXTRA",map)
}
}
class ActivityB extends Activity{
ConCurrentHashMap<String , String> map = new ConCurrentHashMap();
。。。。。。
private void mothedA(){
map = (ConCurrentHashMap < String , String >)getIntent().getSerializableExtra("EXTRA");
//上一行会报类型强转的错误。
}
}
后来在stackoverflow上找了下。没找到这样的问题。但是有个TreeMap传递时也出这个错误的解答。
后来试了下发现也可以解决这个问题。就是将ActivityB 中报错的一行改成:
map = new ConcurrentHashMap<String, Integer>((Map<String, Integer>)getIntent().getSerializableExtra("EXTRA"));
TreeMap在传递时也用类似的方式接收就可以了。至于为什么需要先强转成父类Map在new一个ConcurrentHashMap。答案应该在源码里。