> Download: 迈向高级的Java面试解围课

===============================================================

1、java 容器都有哪些?

罕用容器的图录:
]

2. Collection 和 Collections 有什么区别?
java.util.Collection 是一个汇合接口(汇合类的一个顶级接口)。它提供了对汇合对象进行基本操作的通用接口办法。Collection接口在Java 类库中有很多具体的实现。Collection接口的意义是为各种具体的汇合提供了最大化的对立操作形式,其间接继承接口有List与Set。

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

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

  1. HashMap 和 Hashtable 有什么区别?

hashMap去掉了HashTable 的contains办法,然而加上了containsValue()和containsKey()办法。

hashTable同步的,而HashMap是非同步的,效率上逼hashTable要高。

hashMap容许空键值,而hashTable不容许。

  1. 如何决定应用 HashMap 还是 TreeMap?

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

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

HashMap概述:HashMap是基于哈希表的Map接口的非同步实现。此实现提供所有可选的映射操作,并容许应用null值和null键。此类不保障映射的程序,特地是它不保障该程序恒久不变。

HashMap的数据结构:在java编程语言中,最根本的构造就是两种,一个是数组,另外一个是模仿指针(援用),所有的数据结构都能够用这两个根本构造来结构的,HashMap也不例外。HashMap实际上是一个“链表散列”的数据结构,即数组和链表的结合体。

当咱们往Hashmap中put元素时,首先依据key的hashcode从新计算hash值,杜绝hash值得到这个元素在数组中的地位(下标),如果该数组在该地位上曾经寄存了其余元素,那么在这个地位上的元素将以链表的模式寄存,新退出的放在链头,最先退出的放入链尾.如果数组中该地位没有元素,就间接将该元素放到数组的该地位上。

须要留神Jdk 1.8中对HashMap的实现做了优化,当链表中的节点数据超过八个之后,该链表会转为红黑树来进步查问效率,从原来的O(n)到O(logn)

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

HashSet底层由HashMap实现

HashSet的值寄存于HashMap的key上

HashMap的value对立为PRESENT

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

最显著的区别是 ArrrayList底层的数据结构是数组,反对随机拜访,而 LinkedList 的底层数据结构是双向循环链表,不反对随机拜访。应用下标拜访一个元素,ArrayList 的工夫复杂度是 O(1),而 LinkedList 是 O(n)。

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

List转换成为数组:调用ArrayList的toArray办法。

数组转换成为List:调用Arrays的asList办法。

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

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

ArrayList比Vector快,它因为有同步,不会过载。

ArrayList更加通用,因为咱们能够应用Collections工具类轻易地获取同步列表和只读列表。

  1. Array 和 ArrayList 有何区别?

Array能够包容根本类型和对象,而ArrayList只能包容对象。

Array是指定大小的,而ArrayList大小是固定的。

Array没有提供ArrayList那么多功能,比方addAll、removeAll和iterator等。

  1. 在 Queue 中 poll()和 remove()有什么区别?

poll() 和 remove() 都是从队列中取出一个元素,然而 poll() 在获取元素失败的时候会返回空,然而 remove() 失败的时候会抛出异样。

  1. 哪些汇合类是线程平安的?

vector:就比arraylist多了个同步化机制(线程平安),因为效率较低,当初曾经不太倡议应用。在web利用中,特地是前台页面,往往效率(页面响应速度)是优先思考的。

statck:堆栈类,先进后出。

hashtable:就比hashmap多了个线程平安。

enumeration:枚举,相当于迭代器。

  1. 迭代器 Iterator 是什么?

迭代器是一种设计模式,它是一个对象,它能够遍历并抉择序列中的对象,而开发人员不须要理解该序列的底层构造。迭代器通常被称为“轻量级”对象,因为创立它的代价小。

  1. Iterator 怎么应用?有什么特点?

Java中的Iterator性能比较简单,并且只能单向挪动:

(1) 应用办法iterator()要求容器返回一个Iterator。第一次调用Iterator的next()办法时,它返回序列的第一个元素。留神:iterator()办法是java.lang.Iterable接口,被Collection继承。

(2) 应用next()取得序列中的下一个元素。

  

(3) 应用hasNext()查看序列中是否还有元素。

  

(4) 应用remove()将迭代器新返回的元素删除。

  

Iterator是Java迭代器最简略的实现,为List设计的ListIterator具备更多的性能,它能够从两个方向遍历List,也能够从List中插入和删除元素。

  1. Iterator 和 ListIterator 有什么区别?

Iterator可用来遍历Set和List汇合,然而ListIterator只能用来遍历List。

Iterator对汇合只能是前向遍历,ListIterator既能够前向也能够后向。

ListIterator实现了Iterator接口,并蕴含其余的性能,比方:减少元素,替换元素,获取前一个和后一个元素的索引,等等。