设置接口和自然排序【无厘头面试测试】

Set interface and natural ordering [nonsensical interview test]

一次偶然的机会,我在求职面试 Java 测试中遇到了相同的 Java 问题两次。对我来说,这似乎是无稽之谈。它是这样的:

Which of this collections would you use if you needed a collection with no duplicates and with natural ordering?

  1. java.util.List
  2. java.util.Map
  3. java.util.Set
  4. java.util.Collection

最接近的答案是 Set。但据我所知,除了 List 之外,这些接口并未在其合同中定义任何顺序,但实现 类 是否定义顺序是问题。

我在测试中指出题目错误的地方对吗?

是的,你是对的,none 给出的答案符合要求。正确答案可能是 SortedSet 或其子接口 NavigableSet.

第一个主要线索是"no duplicates."一个数学集合只包含唯一的项目,这意味着没有重复项,所以你在这里是正确的。

在排序方面,也许面试官正在寻找您来扩展您的答案。正如 "Set" 扩展了 "Collection"(在 Java 中),Java 中可能有更具体的 "Sets" 类型。请参阅:HashSet, TreeSet, LinkedHashSet. For example, TreeSet is inherited from SortedSet 界面。

然而,Java 集合绝对不会 provide any ordering。坦率地说,我认为这是一个措辞不佳的问题,你指出的不够精确是对的。

A Set with natural ordering is a SortedSet (which extends Set so it is-a Set), and a concrete implementation of that interface is TreeSet(它实现了 SortedSet 所以它是一个 Set)。

该测试的正确答案是 Set 让我们记住它要求的是可以提供该功能的接口;鉴于 正确的实现 Set 接口可以提供它。

  • Map 接口不保证顺序
    东西被存储,因为这是特定于实现的。但是,如果你 使用正确的实现(即[TreeMap][1] 通过文档),那么你就可以保证自然排序并且没有
    重复条目。但是,没有关于 key-value对.

  • Set 接口也不保证顺序 东西存储在,因为这是特定于实现的。但是,就像 TreeMap,[TreeSet][2]是一个集合,可以用来存放东西在
    没有重复的自然顺序。这是它的样子。
    Set<String> values = new TreeSet<>();

  • List接口肯定会允许重复,这 立即排除。

  • Collection接口没有任何直接实现 它,却是整个collection等级制度的族长。 所以,理论上,这样的代码是合法的:

    Collection<String> values = new TreeSet<>();

    ...但是您会丢失有关什么的信息 有点 collection 它实际上是,所以我不鼓励它 用法。