设置接口和自然排序【无厘头面试测试】
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?
- java.util.List
- java.util.Map
- java.util.Set
- 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 它实际上是,所以我不鼓励它
用法。
一次偶然的机会,我在求职面试 Java 测试中遇到了相同的 Java 问题两次。对我来说,这似乎是无稽之谈。它是这样的:
Which of this collections would you use if you needed a collection with no duplicates and with natural ordering?
- java.util.List
- java.util.Map
- java.util.Set
- 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 它实际上是,所以我不鼓励它 用法。