面试题---容器
1.java容器有哪些?
List,Map,Set ,Collection ,List ,LinkedList ,ArrayList ,Vector ,Stack ,Set Map ,Hashtable ,HashMap ,WeakHashMap
2、数据容器主要分为了两类:
- Collection: 存放独立元素的序列。
- Map:存放key-value型的元素对。(这对于需要利用key查找value的程序十分的重要!)
Collection定义了Collection类型数据的最基本、最共性的功能接口,而List对该接口进行了拓展。
-
LinkedList :==不保证线程安全,==其数据结构采用的是双向链表,此种结构的优势是删除和添加的效率很高,但随机访问元素时效率较ArrayList类低。实现了Deque接口,这个接口具有队列和栈的性质。内存利用率比较高。
-
ArrayList:==不保证线程安全,==其数据结构采用的是线性表,使用数组实现,集合扩容时会创建一个更大的数组,把原有数组复制到新数组中。此种结构的优势是访问和查询十分方便,但添加和删除的时候效率很低。 是容量可变的非线程安全列表,并且实现了RandomAcess标记接口,如果一个类实现了该接口,那么表示使用索引遍历比迭代器更快。
-
HashSet: Set类不允许其中存在重复的元素(集),无法添加一个重复的元素(Set中已经存在)。HashSet利用Hash函数进行了查询效率上的优化,其contain()方法经常被使用,以用于判断相关元素是否已经被添加过。
-
HashMap: 提供了key-value的键值对数据存储机制,可以十分方便的通过键值查找相应的元素,而且通过Hash散列机制,查找十分的方便。
3、Iterator与Iterable
Collection中继承了接口Iterator
iterator为Java中的迭代器对象,是能够对List这样的集合进行迭代遍历的底层依赖。而iterable接口里定义了返回iterator的方法,相当于对iterator的封装,同时实现了iterable接口的类可以支持for each循环。
4、Collection 和 Collections 有什么区别?
Collection 是集合的接口,其继承类又List Set
Collections 是集合的工具类,定义了许多操作集合的静态方法。是帮助类
5、List、Set、Map 之间的区别是什么?
List:有序集合
Set:不重复集合,LinkedHashSet按照插入排序,SortedSet可排序,HashSet无序
Map:键值对集合
(1)元素的重复性:
- List集合中可以出现重复元素
- Set集合中不可以出现重复元素,在向Set集合中存储多个重复的元素时会出现覆盖
- Map集合采用key-value的形式存储,在Map中不能出现重复的Key键,但可以出现多个不同的Key对应相同的Value
(2)元素的有序性:
- List集合及其所有的实现类都确保了元素的有序性
- Set集合中的元素是无序的,但是某些Set集合通过特定的形式对其中的元素进行排序,如LinkedHashSet
- Map和Set一样对元素进行了无序存储,如:TreeMap根据Key键实现了元素的升序排序
(3)元素是否为空值:
- List集合中允许存在多个空值
- Set最多允许一个空值出现
- Map中只允许出现一个空键,但允许出现多个空值
6、HashMap 和 Hashtable 有什么区别?
- HashMap不是线程安全的 hashmap是一个接口 是map接口的子接口,是将键映射到值的对象,其中键和值都是对象,并且不能包含重复键,但可以包含重复值。HashMap允许null key和null value
- HashTable是线程安全的一个map。 HashMap是Hashtable的轻量级实现(非线程安全的实现),他们都完成了Map接口,
主要区别:
在于HashMap允许空(null)键值(key),由于非线程安全,效率上可能高于Hashtable。 HashMap允许将null作为一个entry的key或者value,而Hashtable不允许。 HashMap把Hashtable的contains方法去掉了,改成containsvalue和containsKey。因为contains方法容易让人引起误解。 Hashtable继承自Dictionary类,而HashMap是Java1.2引进的Map interface的一个实现。 最大的不同是,Hashtable的方法是Synchronized,而HashMap不是,在多个线程访问Hashtable时,不需要自己为它的方法实现同步,而HashMap 就必须为之提供外同步。 Hashtable和HashMap采用的hash/rehash算法都大概一样,所以性能不会有很大的差异。
7、如何决定使用hashMap还是TreeMap?
TreeMap<K,V> 的Key值是要求实现 java.lang.Comparable ,所以迭代的时候TreeMap默认是按照Key值升序排序的;
TreeMap的实现是基于红黑树结构。适用于按自然顺序或自定