50道集合框架面试题 (12)

3Set<Map.Entry<K,V>> entrySet():返回一个map钟包含的所有映射的一个集合视图。这个集合受map支持的,map的变化会在collection中反映出来,反之亦然。当一个迭代器正在遍历一个集合时,若map被修改了(除迭代器自身的移除操作,以及对迭代器返回的entry进行setValue外),迭代器的结果会变为未定义。集合支持通过IteratorRemoveSet.removeremoveAllretainAllclear操作进行元素移除,从map中移除对应的映射。它不支持addaddAll操作。

21.HashMapHashTable有何不同?

1HashMap允许keyvaluenull,而HashTable不允许。

2HashTable是同步的,而HashMap不是。所以HashMap适合单线程环境,HashTable适合多线程环境。

3)在Java1.4中引入了LinkedHashMapHashMap的一个子类,假如你想要遍历顺序,你很容易从HashMap转向LinkedHashMap,但是HashTable不是这样的,它的顺序是不可预知的。

4HashMap提供对keySet进行遍历,因此它是fail-fast的,但HashTable提供对keyEnumeration进行遍历,它不支持fail-fast

5HashTable被认为是个遗留的类,如果你寻求在迭代的时候修改Map,你应该使用CocurrentHashMap

22.如何决定选用HashMap还是TreeMap

对于在Map中插入、删除和定位元素这类操作,HashMap是最好的选择。然而,假如你需要对一个有序的key集合进行遍历,TreeMap是更好的选择。基于你的collection的大小,也许向HashMap中添加元素会更快,将map换为TreeMap进行有序key的遍历。

23.ArrayListVector有何异同点?

ArrayListVector在很多时候都很类似。

1)两者都是基于索引的,内部由一个数组支持。

2)两者维护插入的顺序,我们可以根据插入顺序来获取元素。

3ArrayListVector的迭代器实现都是fail-fast的。

4ArrayListVector两者允许null值,也可以使用索引值对元素进行随机访问。

以下是ArrayListVector的不同点。

1Vector是同步的,而ArrayList不是。然而,如果你寻求在迭代的时候对列表进行改变,你应该使用CopyOnWriteArrayList

2ArrayListVector快,它因为有同步,不会过载。

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/zzgpxp.html