1、线程安全的map在JDK 1.5及其更高版本环境 有哪几种方法可以实现?
A、Map map = new HashMap()
B、Map map = new TreeMap()
C、Map map = new ConcurrentHashMap();
D、Map map = Collections.synchronizedMap(new HashMap());
答案是C、D
1. HashMap,TreeMap 未进行同步考虑,是线程不安全的。
2. HashTable 和 ConcurrentHashMap 都是线程安全的。区别在于他们对加锁的范围不同,HashTable 对整张Hash表进行加锁,而ConcurrentHashMap将Hash表分为16桶(segment),每次只对需要的桶进行加锁。
3. Collections 类提供了synchronizedXxx()方法,可以将指定的集合包装成线程同步的集合。比如,
List list = Collections.synchronizedList(new ArrayList());
Set set = Collections.synchronizedSet(new HashSet());
2、下面论述正确的是()?
A、如果两个对象的hashcode相同,那么它们作为同一个HashMap的key时,必然返回同样的值
B、如果a,b的hashcode相同,那么a.equals(b)必须返回true
C、对于一个类,其所有对象的hashcode必须不同
D、如果a.equals(b)返回true,那么a,b两个对象的hashcode必须相同
答