【题目解析】Java容器部分

1、Java 容器都有哪些?

  • Java容器分为Collection和Map两大类,其下又分很多子类,如图:
    【题目解析】Java容器部分_第1张图片

2、Collection 和 Collections 有什么区别?

  • Collection 是一个集合接口,它提供对集合对象进行基本操作的通用接口方法,所有集合都是它子类,比如List、Set等。
  • Collections 是一个包装类,包含很多静态方法,不能被实例化,算是一个工具列,比如提供的排序方法Collections.sort(list)

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

  • 区别体现在两个方面,元素是否有序和是否允许元素重复。

【题目解析】Java容器部分_第2张图片

4、HashMap 和 Hashtable 有什么区别?

  • 存储:HashMap的key和value可以为null,而Hashtable不允许。
  • 线程安全:Hashtable是线程安全的,而HashMap是非线程安全的。
  • Hashtable 是保留类,不建议使用。推荐在单线程环境下用HashMap替代,多线程环境下用ConcurrentHashMap替代。

5、如何决定使用 HashMap 还是 TreeMap?

  • 对于在Map中插入,删除,查找一个元素的操作,使用HashMap。
  • 对一个key集合进行有序遍历,用TreeMap。

6、说一下 HashMap 的实现原理?

  • HashMap是基于Hash算法实现的,通过put(key,value)存储,get(key)来获取。
  • 当传入key时,HashMap会根据key.hashCode()计算出hash值,根据hash值将value保存在bucket里。
  • 当计算处的hash值相同时,发生哈希冲突;HashMap的做法是用链表和红黑树存储相同hash值的value。
  • 当哈希冲突个数较少时,使用链表,否则就用红黑树。

7、说一下 HashSet 的实现原理?

  • HashSet 是基于HashMap实现的,底层基于HashMap来保存所有元素,因此其实现较简单,相关HashSet的操作,大多是直接调用底层HashMap的相关方法完成,HashSet不允许重复值。

8、ArrayList 和 LinkedList 的区别是什么?

  • 数据结构实现:前者是动态数组;后者是双向链表。
  • 随机访问效率:前者比后者在随机访问时效率要高,因为后者是线性的数据存储结构,所以需要移动指针从前往后查找。
  • 增删速率:在非首尾的增删操作,后者比前者效率高,因为前者增删操作要影响数组内其他数据的下标。
  • 综合:频繁读取~ArrayList ;多插入删除~LinkedList。

9、如何实现数组和 List 之间的转换?

  • 数组转List:使用Arrays.asList(array)方法。
  • List转数组:使用List自带的toArray()方法。

10、ArrayList 和 Vector 的区别是什么?

  • 线程安全:Vector 使用 Synchronized 来实现线程同步,是线程安全的;而ArrayList是非线程安全的。
  • 性能:ArrayList 优于 Vector。
  • 扩容:都会根据实际需要动态调整容量,只是Vector扩容每次会增加1倍;而ArrayList只会增加50%

11、Array 和 ArrayList 的区别是什么?

  • Array 可以存储基本数据类型和对象,ArrayList 只能存储对象。
  • Array 是指定固定大小的,而ArrayList大小是自动扩展的。
  • Array 内置方法没有ArrayList 多,比如 addAll、removeAll、iteration 等方法只有 ArrayList 有。

12、在 Queue 中 poll()和 remove()有什么区别?

  • 相同点:都是返回第一个元素,并在队列中删除返回的对象;
  • 不同点:如果没有元素 poll()会返回null,而 remove()会直接抛出NoSuchElementException。

13、哪些集合类是线程安全的?

  • Vector、Hashtable、Stack 均是线程安全的,而 HashMap 是非线程安全的。
  • 但在JDK1.5之后,它们也有对应的线程安全类,比如HashMap对应的线程安全类就是ConcurrentHashMap。

14、迭代器 Iterator 是什么?

  • Iterator 接口提供遍历任何Collection的接口。
  • 可从一个 Collection 中使用迭代器方法来获取迭代器实例。
  • 迭代器取代了Java集合框架中的Enumeration,允许调用者在迭代过程中移除元素。

15、Iterator 怎么使用?有什么特点?

  • 使用如下:
List<String> list = new ArrayList<>();
Iterator<String> tmp = list. iterator();
while(tmp. hasNext()){
  String s = tmp. next();
  System. out. println(s);
}
  • 特点:更加安全;因为可以确保在当前遍历的集合元素被更改时,就会抛出ConcurrentModificationException。

16、Iterator 和 ListIterator 有什么区别?

  • 前者可以遍历Set和List集合,而后者只能遍历List。
  • 前者只能单向遍历,而后者可以双向遍历。
  • 后者从 Iterator 接口继承,然后添加了一些额外功能。

17、怎么确保一个集合不能被修改?

  • 使用 Collections. unmodifiableCollection(Collection c)方法来创建一个只读集合,这样改变集合的任何操作都会抛出 Java.lang.UnsupportedOperationException异常。

你可能感兴趣的:(Java,题目)