面试题之容器1

二、容器

18.java 容器都有哪些?

常用的容器图录:
面试题之容器1

19.Collection 和 Collections 有什么区别?

java.util.Collection 是一个集合接口(集合类的一个顶级接口)。

  1. Collection接口它提供了对集合对象进行基本操作的通用接口方法。
  2. Collection接口在Java 类库中有很多具体的实现。
  3. Collection接口的意义是为各种具体的集合提供了最大化的统一操作方式,其直接继承接口有List与Set。

Collections则是集合类的一个工具类/帮助类,其中提供了一系列静态方法,用于对集合中元素进行排序、搜索以及线程安全等各种操作。

20.List、Set、Map 之间的区别是什么?

面试题之容器1

21.HashMap 和 Hashtable 有什么区别?

  1. hashMap去掉了HashTable 的contains方法,但是加上了containsValue()和containsKey()方法。
  2. hashTable同步的,而HashMap是非同步的,效率上比hashTable要高。
  3. hashMap允许空键值,而hashTable不允许。

22.如何决定使用 HashMap 还是 TreeMap?

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

23.说一下 HashMap 的实现原理?

HashMap概述:

  1. HashMap是基于哈希表的Map接口的非同步实现。
  2. 此实现提供所有可选的映射操作,并允许使用null值和null键。
  3. 此类不保证映射的顺序,特别是它不保证该顺序恒久不变。

HashMap的数据结构:

  1. 在java编程语言中,最基本的结构就是两种,一个是数组,另外一个是模拟指针(引用),所有的数据结构都可以用这两个基本结构来构造的,HashMap也不例外。
  2. HashMap实际上是一个“链表散列”的数据结构,即数组和链表的结合体。
  3. 当我们往Hashmap中put元素时,首先根据key的hashcode重新计算hash值,根绝hash值得到这个元素在数组中的位置(下标),如果该数组在该位置上已经存放了其他元素,那么在这个位置上的元素将以链表的形式存放,新加入的放在链头,最先加入的放入链尾.如果数组中该位置没有元素,就直接将该元素放到数组的该位置上。
  4. 需要注意Jdk 1.8中对HashMap的实现做了优化,当链表中的节点数据超过八个之后,该链表会转为红黑树来提高查询效率,从原来的O(n)到O(logn)

24.说一下 HashSet 的实现原理?

HashSet底层由HashMap实现
HashSet的值存放于HashMap的key上
HashMap的value统一为PRESENT

25.ArrayList 和 LinkedList 的区别是什么?

  1. 最明显的区别是 ArrrayList底层的数据结构是数组,支持随机访问,
  2. 而 LinkedList 的底层数据结构是双向循环链表,不支持随机访问。
  3. 使用下标访问一个元素,ArrayList 的时间复杂度是 O(1),而 LinkedList 是 O(n)。**

26.如何实现数组和 List 之间的转换?

List转换成为数组:调用ArrayList的toArray方法。
数组转换成为List:调用Arrays的asList方法。

27.ArrayList 和 Vector 的区别是什么?

  1. Vector是同步的,而ArrayList不是。
  2. 然而,如果你寻求在迭代的时候对列表进行改变,你应该使用CopyOnWriteArrayList。
  3. ArrayList比Vector快,它因为有同步,不会过载。
  4. ArrayList更加通用,因为我们可以使用Collections工具类轻易地获取同步列表和只读列表。

28.Array 和 ArrayList 有何区别?

ArrayList是一个长度可以自动增长的Array
其实上面一句话就道尽了两者最核心的区别
(1)长度:Array长度固定,ArrayList可以动态扩容
(2)效率:效率上Array>ArrayList,原因自然在于ArrayList动态扩容造成了效率损耗。

  1. Array可以容纳基本类型和对象,而ArrayList只能容纳对象。
  2. Array是指定大小的,而ArrayList大小是固定的。
  3. Array没有提供ArrayList那么多功能,比如addAll、removeAll和iterator等。

如果有什么问题或者建议的话,可以留言评论哦 , 谢谢!!!