偶然发生在我身上两次,我在求职面试Java测试中得到了同样的Java问题。对我来说,这似乎是一个废话。它是这样的:
如果你需要一个没有的集合,你会使用哪个集合 重复和自然排序?
- 的java.util.List
- java.util.Map
- java.util.Set中
- java.util.Collection中
醇>
最接近的答案是Set
。但据我所知,这些接口除了List
之外没有在合同中定义任何排序,但是实现类的问题是否有定义的顺序。
我是否正确地指出测试中的问题是错误的?
答案 0 :(得分:4)
第一个主要线索是"没有重复。"数学集只包含唯一的项目,这意味着没有重复项,所以你在这里是正确的。
在订购方面,也许面试官正在寻找你扩展你的答案。就像" Set"扩展"收集" (在Java中),有更多特定类型的"集"可能在Java中。请参阅:HashSet, TreeSet, LinkedHashSet.例如,TreeSet继承自SortedSet接口。
但是,Java集合不是provide any ordering,这绝对是正确的。坦率地说,我认为这是一个措辞不够的问题,你指出精确度不足是正确的。
答案 1 :(得分:2)
是的,你是对的,没有给出的答案符合要求。正确答案可能是SortedSet
或其子接口NavigableSet
。
答案 2 :(得分:2)
答案 3 :(得分:2)
该测试的正确答案是 Set
让我们记住它要求的界面可以提供该测试;如果正确实现,Set
接口可以提供它。
Map
界面并未就什么顺序做出任何保证
存储的东西,因为具体的实现。但是,如果你
使用正确的实现(即[TreeMap][1]
拼写出来
通过文档),那么你保证了自然的顺序,没有
重复的条目。但是,没有要求
键值对。
Set
界面也无法保证订单的顺序
事物存储在,特定的实现。但是,就像
TreeMap
,[TreeSet][2]
是一个可用于存储内容的集合
自然顺序,没有重复。这是它的外观。
Set<String> values = new TreeSet<>();
List接口肯定会允许重复,这些 立即排除它。
Collection界面没有任何直接实现的内容 它,但它是整个集合层次结构的族长。 因此,从理论上讲,这样的代码是合法的:
Collection<String> values = new TreeSet<>();
...但是你失去了关于什么的信息 它实际上是那种集合,所以我不鼓励它 的使用。