乐趣区

关于java:2021年Java集合面试Top问题-第一部分

原文:https://dzone.com/articles/to…
作者: Sonia Mathias
翻译: 祝坤荣

在 Java 中,汇合是一种提供了存储与操作批量对象的框架。在 JDK1.2 中“汇合框架”就被定义了,而且它提供了所有的汇合类和接口。Java 汇合类中最次要的两个次要接口是 Collection 接口(java.util.Collection)和 Map 接口(java.util.Map)。Java 汇合框架提供的接口包含 Set,List,Queue,Deque,提供类包含 ArrayList,Vector,LinkedList,HashSet,PriorityQueue,TreeSet 和 LinkedHashSet。

须要一个拆散的汇合框架

如果咱们不应用汇合框架,规范的用于给 Java 对象分组的办法是 Arrays,Vectors 或者 HashTable。他们都没有通用的接口。他们的实现都是被独自定义的且相互之间没有任何分割。因而,要去记住所有不同的办法,语法,和创立函数都很艰难。

比方,如果要给 Vector 加一个元素咱们会应用 addElement()办法,而给 Hashtable 加一个元素则应用 put()办法。

应用汇合框架的益处

  1. 升高编程累赘:一个开发者能够聚焦在汇合的最佳应用办法上而不是聚焦在汇合的设计上。这对实现形象有益处。
  2. 晋升编程速度:汇合提供了一种数据结构的高性能实现,这能够晋升速度。
  3. 因为 Java 曾经是一种宽泛应用的语言了,大大小小的组织都在应用它。为本人筹备好根底的和高级的 Java 面试题能够对面试有益处。

让咱们看看 java 面试中被问得最多的一些问题。

对高级开发者问的最多的问题

问题 1:什么是 Java 中的框架?
答:框架是提供了脚手架性能的一组类和对象的汇合。现实的面向对象设计都应该有一个框架提供了对于汇合类的同类型工作提供同样的操作。

问题 2:定义 Java 的汇合框架。
答:Java 的汇合框架是一组接口和类的汇合,提供了高效保留和解决数据的办法。Java 汇合框架提供的接口有 Set,List,Queue,Deque,提供的类包含 ArrayList,Vector,LinkedList,HashSet,PriorityQueue,TreeSet 和 LinkedHashSet。

问题 3:Java 汇合框架中 ArrayList 与 Vector 的不同之处。
答:
ArrayList

  • 不是 synchronized 的
  • 它能够以其数组大小的 50% 来扩大其大小
  • 它不是线程平安的
  • 它不是遗留类
    Vector:
  • 它是 synchronized 的
  • 它能够减少本人双倍的大小
  • 它是线程平安的
  • 它是遗留类
  • 问题 4:Iterator 与 Enumeration 的不同点。
    答:
    Iterator
  • 它能够遍历遗留类和非遗留类
  • 它比 Enumeration 慢
  • 它在遍历汇合时能够执行 remove 操作
  • 它是 fail-fast 的

Enumeration

  • 它只能遍历遗留元素
  • 它比 Iterator 快
  • 它只能在汇合上执行 traverse
  • 它不是 fail-fast 的

问题 5:LinkedList 与 ArrayList 的区别?
答:
ArrayList

  • 这个类实现了 list 接口
  • 这个类应用了动静数组来存储元素
  • 插入与移除操作的最佳复杂度是 O(1),而最差复杂度是 O(n)。查问操作(如存储一个特定索引的元素)会须要 O(1)的工夫。
  • ArrayList 在存储和查问数据时无能的比拟好。

LinkedList

  • 这个类实现了 list 接口和 deque 接口。
  • 这个类存储元素应用了双链列表。
  • 插入与移除操作提供了 O(1)的性能。查问操作(比方查问一个特定索引的元素)须要 O(n)的工夫。
  • LinkedList 在操作存储好的数据时性能更好。
  • 问题 6:解释一下 Queue 接口的 poll()与 remove()办法的不同。
    答:两个办法都返回并移除队列头的内容。它们只有在队列为空时行为不一样;remove()会抛一个异样而 poll()会返回 null。

问题 7:Comparable 与 Comparator 的不同。
答:
Comparable

  • 它提供了被排序元素应用的 compareTo()办法
  • 它属于 java.lang 包
  • 排序逻辑必须要与咱们想要排序的对象在同一个类中
  • 它提供独自的排序序列。
  • 理论类被改过了

Comparator

  • 它提供排序元素用的 compare()办法
  • 它在 java.util 包中
  • 排序逻辑必须要在不同的类中,以便依据不同对象的不同属性来编写排序办法
  • 它提供多种排序序列
  • 理论类没有被改变

问题 8:计算机内存中 Stack 的定义是?
答:stack 是计算机内存中一个非凡区域,用来存储函数创立的长期变量。在 stack 中,变量是在运行时被申明,存储和初始化的。

问题 9:列出 map 接口的汇合视图。
答:
汇合视图(Collection view)办法能够让 Map 在以下


三种形式视为一个汇合:

  • 键汇合视图:Map 中保留的所有键的 Set 汇合。
  • 值汇合视图:Map 中保留的所有值的汇合。这个汇合不是一个 Set,因为不同的主键 key 能够被映射到同一个值 value。
  • Entry 汇合视图:Map 中键值对的汇合 Set。Map 接口提供了一个小的内嵌接口 Map.Entry,元素都存储在这个 Set。

问题 10:定义 EnumSet。
答:它是能够应用 enum 枚举类型的 Set 实现。所有的元素都必须属于一个特定的 enum 类型。它不是 synchronized。NULL key 是不容许的。

问题 11:什么办法能让汇合变成线程平安的?
答:这些办法是:

  • Collections.synchronizedList(list);
  • Collections.synchronizedMap(map);
  • Collections.synchronizedSet(set);
  • 问题 12:Queue 与 Deque 的不同点
    答:
    Queue
  • 家喻户晓是单向队列
  • 队列中的元素在填加或删除是都在同一端
  • Less versatile
    Deque
  • 是双端队列
  • 队列中的元素能够从队尾填加或者从两端填加和删除。
  • More versatile

问题 13:hashmap 与 hashtable 的不同
答:
Hashmap

  • 不是 synchronized,不是线程平安
  • 继承了 AbstractMap 类
  • 容许一个 null key 和多个 null value。
  • 能够被 iterator 遍历
    Hashtable
  • Synchronized 的,线程平安
  • 继承了 Dictionary 类
  • 不容许空 key 或者值
  • 能够被 enumerator 和 iterator 遍历

问题 14:定义 Iterator。
答:Iterator()是一个提供了遍历汇合办法的接口。它提供了一种普世的形式来遍历汇合中的元素,并实现了 iterator 设计模式。

问题 15:什么是 navigable map?
答:NavigableMap 接口,Java 汇合框架的成员,属于 java.util 包。它是 SortedMap 的子接口,提供了如 lowerKey,floorKey,ceilingKey 和 higherKey 这样不便的导航办法。它也提供了从现有 map 创立一个子 map 的办法。

问题 16:什么是 queue 接口的 peek()?
答:Peek()返回了队列的头。它不移除任何元素。当队列为空时返回 null。

未完待续


本文来自祝坤荣 (时序) 的微信公众号「麦芽面包」,公众号 id「darkjune_think」
开发者 / 科幻爱好者 / 硬核主机玩家 / 业余翻译
转载请注明。

微博: 祝坤荣
B 站: https://space.bilibili.com/23…

交换 Email: zhukunrong@yeah.net

退出移动版