1. 你所知道的集合类都有哪些?主要方法
最常用的集合类是List 和 Map。List的具体实现包括ArrayList 和 Vector,它们可变大小的列表,比较适合构建,存储,和操作任何类型对象的元素列表,List适用于按数值索引访问元素的情形。Map提供了一个更通用的元素存储方法。Map集合类用于存储元素(称作“键”和"值"),其中每个键映射到一个值。
2. Collection FrameWork如下:
conllection 包括 list(LinkedList 和 Vector ,arraylist) 和 List
Map 包括 HashMap Hashtable
3. ArrayList 和 Vector 区别?
1) 同步性:Vector是线程安全的(同步的),而ArrayList是线程不安全的;
2)数据增长:当需要增长时,Vector默认增长一倍,而ArrayList却是一半。
4. List Map Set 三个接口,存取元素时,各有什么特点?
List以特点次序来持有元素时,可有重复元素,Set无法拥有重复元素,每部排序。Map保存key-value值,value可多值。
5. set 里的元素不能重复。那么用什么方法来区分重复与否呢?
Set里元素是不能重复的,用equals() 方法区分重复与否。覆盖equals() 方法用来判断对象的内容是否相同,而"==" 来判断地址是否相等,用来确定引用值是否是同一对象。
6. HashMap 和 Hashtale的区别?
二者都实现Map接口,是将唯一键映射到特点的值上,主要区别与:
1. HashMap没有排序,允许一个null键和和多个null值,而HashMap不允许。
2. HashMap把HashMap的contains方法去掉了,改成containvalue和containKey,因为contains方法容易让人引起误解。
3. Hashtable继承自Dictonary类,HashMap是java1.2引进的Map接口的实现。
4. Hashtable的方法是同步的,而HashMap不是,在多个线程访问Hashtable时,不需要为它的方法实现同步,而HashMap就必须为之提供外同步,
7. Collection 和 Collections的区别
Collection是java.uitl 下的接口,他是各种集合的父接口,继承于它的接口主要有set 和list;Conllecitons是个java.util下的类,是针对集合的帮助类,提供一系列静态方法对各种集合的搜索,排序,线程安全化等操作。
8. ArrayList 和 LinkedList的区别
linkedlist实现 list 和 deque接口,一般称为双向链表。
linkedList 一般在插入和删除数据时的效率更高。
而ArrayList 多用于查询操作
线程安全的map
1. synchronizedMap
这种是直接使用工具类里面的方法创建SynchronizedMap, 把传入进行的HashMap对象进行了包装同步而已,看出SynchronizedMap的实现方式是加了对象锁,每次对HashMap的操作,都要先获取mutex的对象锁才能进入,所以性能也不会比HashTable好到那里去,也不建议使用。
2. ConcurrentHashMap
这个也是最推荐使用的线程安全的Map,也是实现方式最复杂的一个集合,每个版本的实现方式也不一样,在jdk8之前是使用分段加锁的一个方式,分成16个桶。每次只加锁其中一个桶,而在jdk8之后又加入了红黑树和CAS算法来实现。
网友评论