如何在没有迭代的情况下获取给定LinkedHashSet元素的索引?

Jam*_*sev 24 java iteration set

它甚至可能吗?

说你有

private Set<String> names = new LinkedHashSet<String>();
Run Code Online (Sandbox Code Playgroud)

并且Strings是"迈克","约翰","凯伦".

是否有可能在没有迭代的情况下得到"1"以回答"约翰"的索引是什么?

以下工作正常..有了这个问题,我想知道是否有更好的方法

for (String s : names) {
    ++i;
    if (s.equals(someRandomInputString)) {
        break;
    }
}
Run Code Online (Sandbox Code Playgroud)

Bal*_*usC 23

Set接口并没有像作为一种indexOf()方法.你真的需要迭代它或者使用提供方法List接口.indexOf()

如果你想,转换SetList是很琐碎,它应该是传递的问题Set通过的构造函数List执行.例如

List<String> nameList = new ArrayList<String>(nameSet);
// ...
Run Code Online (Sandbox Code Playgroud)

  • 可怕的答案.我必须创建一个新的arraylist来做到这一点?想象一下你一直这样做.这个问题在SO上没有很好的答案,所以我必须自己编写. (5认同)
  • @momo:对糟糕的功能需求的回答通常很糟糕。首先使用`List`而不是`Set`。 (2认同)
  • 列表和集合也会产生不同的结果。也许用户需要一种以有效的方式避免重复的方法,为什么使用链接的哈希表,又希望能够向某人显示可用项列表,并让他们仅选择一项。我在下面发布了我的答案。它使用arraylist作为备份,从而允许o(1)get(index) (2认同)