这部分也包含数据结构、算法及数组的面试问题java
List、Set、Map 和 Queue 之间的区别(答案)
List 是一个有序集合,容许元素重复。它的某些实现能够提供基于下标值的常量访问时间,可是这不是 List 接口保证的。Set 是一个无序集合。面试
poll() 方法和 remove() 方法的区别?
poll() 和 remove() 都是从队列中取出一个元素,可是 poll() 在获取元素失败的时候会返回空,可是 remove() 失败的时候会抛出异常。算法
Java 中 LinkedHashMap 和 PriorityQueue 的区别是什么?(答案)
PriorityQueue 保证最高或者最低优先级的的元素老是在队列头部,可是 LinkedHashMap 维持的顺序是元素插入的顺序。当遍历一个 PriorityQueue 时,没有任何顺序保证,可是 LinkedHashMap 课保证遍历顺序是元素插入的顺序。数组
ArrayList 与 LinkedList 的不区别?(答案)
最明显的区别是 ArrrayList 底层的数据结构是数组,支持随机访问,而 LinkedList 的底层数据结构书链表,不支持随机访问。使用下标访问一个元素,ArrayList 的时间复杂度是 O(1),而 LinkedList 是 O(n)。更多细节的讨论参见答案。数据结构
用哪两种方式来实现集合的排序?(答案)
你能够使用有序集合,如 TreeSet 或 TreeMap,你也能够使用有顺序的的集合,如 list,而后经过 Collections.sort() 来排序。编辑器
Java 中怎么打印数组?(answer答案)
你能够使用 Arrays.toString() 和 Arrays.deepToString() 方法来打印数组。因为数组没有实现 toString() 方法,因此若是将数组传递给 System.out.println() 方法,将没法打印出数组的内容,可是 Arrays.toString() 能够打印每一个元素。spa
Java 中的 LinkedList 是单向链表仍是双向链表?(答案)
是双向链表,你能够检查 JDK 的源码。在 Eclipse,你能够使用快捷键 Ctrl + T,直接在编辑器中打开该类。code
Java 中的 TreeMap 是采用什么树实现的?(答案)
Java 中的 TreeMap 是使用红黑树实现的。对象
Hashtable 与 HashMap 有什么不一样之处?(答案)
这两个类有许多不一样的地方,下面列出了一部分: a) Hashtable 是 JDK 1 遗留下来的类,而 HashMap 是后来增长的。 b)Hashtable 是同步的,比较慢,但 HashMap 没有同步策略,因此会更快。 c)Hashtable 不容许有个空的 key,可是 HashMap 容许出现一个 null key。 更多的不一样之处参见答案。blog
Java 中的 HashSet,内部是如何工做的?(answer答案)
HashSet 的内部采用 HashMap来实现。因为 Map 须要 key 和 value,因此全部 key 的都有一个默认 value。相似于 HashMap,HashSet 不容许重复的 key,只容许有一个null key,意思就是 HashSet 中只容许存储一个 null 对象。
写一段代码在遍历 ArrayList 时移除一个元素?(答案)
该问题的关键在于面试者使用的是 ArrayList 的 remove() 仍是 Iterator 的 remove()方法。这有一段示例代码,是使用正确的方式来实如今遍历的过程当中移除元素,而不会出现 ConcurrentModificationException 异常的示例代码。
咱们能本身写一个容器类,而后使用 for-each 循环吗?
能够,你能够写一个本身的容器类。若是你想使用 Java 中加强的循环来遍历,你只须要实现 Iterable 接口。若是你实现 Collection 接口,默认就具备该属性。
ArrayList 和 HashMap 的默认大小是多数?(答案)
在 Java 7 中,ArrayList 的默认大小是 10 个元素,HashMap 的默认大小是16个元素(必须是2的幂)。这就是 Java 7 中 ArrayList 和 HashMap 类的代码片断:
// from ArrayList.java JDK 1.7 private static final int DEFAULT_CAPACITY = 10; //from HashMap.java JDK 7 static final int DEFAULT_INITIAL_CAPACITY = 1 << 4; // aka 16
有没有可能两个不相等的对象有有相同的 hashcode?
有可能,两个不相等的对象可能会有相同的 hashcode 值,这就是为何在 hashmap 中会有冲突。相等 hashcode 值的规定只是说若是两个对象相等,必须有相同的hashcode 值,可是没有关于不相等对象的任何规定。
两个相同的对象会有不一样的的 hash code 吗?
不能,根据 hash code 的规定,这是不可能的。
咱们能够在 hashcode() 中使用随机数字吗?(答案)
不行,由于对象的 hashcode 值必须是相同的。参见答案获取更多关于 Java 中重写 hashCode() 方法的知识。
Java 中,Comparator 与 Comparable 有什么不一样?(答案)
Comparable 接口用于定义对象的天然顺序,而 comparator 一般用于定义用户定制的顺序。Comparable 老是只有一个,可是能够有多个 comparator 来定义对象的顺序。
为何在重写 equals 方法的时候须要重写 hashCode 方法?(答案)
由于有强制的规范指定须要同时重写 hashcode 与 equal 是方法,许多容器类,如 HashMap、HashSet 都依赖于 hashcode 与 equals 的规定。