Java集合的无随机访问方法

Java集合的无随机访问方法,java,collections,set,Java,Collections,Set,我想知道为什么Java集中没有像Map一样的随机访问方法getObject。在当前的实现中,迭代整个集合似乎是不必要的开销 > boolean contains(Object o) Returns true if this set contains the specified element. 从中,集合不是关于随机元素检索,而是关于测试其中是否存在元素。如果您的应用程序需要检索,那么它实际上需要的是一个身份映射—一个您放置key、key的映射。然后,您将能够得到您想要的对象。还请注

我想知道为什么Java集中没有像Map一样的随机访问方法getObject。在当前的实现中,迭代整个集合似乎是不必要的开销

> boolean   contains(Object o)
Returns true if this set contains the specified element.

中,集合不是关于随机元素检索,而是关于测试其中是否存在元素。如果您的应用程序需要检索,那么它实际上需要的是一个身份映射—一个您放置key、key的映射。然后,您将能够得到您想要的对象。还请注意,这样做不会产生任何开销,因为哈希集是以几乎完全相同的方式根据哈希映射实现的。

正如其他人所指出的,一个集或多或少是按照一个数学集建模的,它本身与随机访问无关。但是,如果您必须访问一个元素,则可以执行以下操作:

Set<Object> mySet = new HashSet<Object>();
mySet.add("one");
Object access = mySet.toArray()[0];

这就是布袋的设计原理。@duffymo,我不这么认为。没有什么可以阻止对元素是否在集合中进行直接成员资格测试。设计中的任何内容都不会强制迭代您计划使用什么键来访问元素?我认为这种行为更像一个袋子:伸手去抓一个任意的。我会引用API中的缺陷作为我声明的证据。但是时间复杂性是开的,这与随机访问方法相比并不有效。它说复杂性在哪里?这取决于实际实现接口的内容。HashSet应该是o1java6源代码,它只调用HashMap上的containsKey。在涉及的集合上没有迭代