设置界面和自然排序[荒谬的面试测试]

时间:2015-05-28 00:05:41

标签: java data-structures collections

偶然发生在我身上两次,我在求职面试Java测试中得到了同样的Java问题。对我来说,这似乎是一个废话。它是这样的:

  

如果你需要一个没有的集合,你会使用哪个集合   重复和自然排序?

     
      
  1. 的java.util.List
  2.   
  3. java.util.Map
  4.   
  5. java.util.Set中
  6.   
  7. java.util.Collection中
  8.   

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

我是否正确地指出测试中的问题是错误的?

4 个答案:

答案 0 :(得分:4)

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

在订购方面,也许面试官正在寻找你扩展你的答案。就像" Set"扩展"收集" (在Java中),有更多特定类型的"集"可能在Java中。请参阅:HashSet, TreeSet, LinkedHashSet.例如,TreeSet继承自SortedSet接口。

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

答案 1 :(得分:2)

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

答案 2 :(得分:2)

具有自然排序的SetSortedSet(扩展Set,因此它是-Set),并且该接口的具体实现是{{3} (实现SortedSet,因此它是-Set)。

答案 3 :(得分:2)

该测试的正确答案是 Set 让我们记住它要求的界面可以提供该测试;如果正确实现Set接口可以提供它。

  • Map界面并未就什么顺序做出任何保证 存储的东西,因为具体的实现。但是,如果你 使用正确的实现(即[TreeMap][1]拼写出来 通过文档),那么你保证了自然的顺序,没有 重复的条目。但是,没有要求 键值对。

  • Set界面也无法保证订单的顺序 事物存储在,特定的实现。但是,就像 TreeMap[TreeSet][2]是一个可用于存储内容的集合 自然顺序,没有重复。这是它的外观。
    Set<String> values = new TreeSet<>();

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

  • Collection界面没有任何直接实现的内容 它,但它是整个集合层次结构的族长。 因此,从理论上讲,这样的代码是合法的:

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

    ...但是你失去了关于什么的信息 它实际上是那种集合,所以我不鼓励它 的使用。