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

2022-09-01 13:17:54

这有可能吗?

说你有

private Set<String> names = new LinkedHashSet<String>();

并且是“迈克”,“约翰”,“凯伦”。Strings

有没有可能得到“1”来换取“”约翰“的索引是什么而没有迭代?

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

for (String s : names) {
    ++i;
    if (s.equals(someRandomInputString)) {
        break;
    }
}

答案 1

Set 接口没有类似方法的东西。您确实需要迭代它或使用List接口,该接口提供了一个indexOf()方法indexOf()

如果您愿意,转换为是非常微不足道的,这应该是传递实现的构造函数的问题。例如:SetListSetList

List<String> nameList = new ArrayList<String>(nameSet);
// ...

答案 2

我不这么认为,但是你可以创建一个包装类来为你进行迭代,或者保留一个单独的表,其中包含每个条目的索引,如果性能下降对于你的用例来说是可以接受的。LinkedHashSetWithIndex