LinkedHashSet 从某个元素开始循环 (Java)。

LinkedHashSet loop from some element onwards (Java).

我在我的代码中使用了 LinkedHashSet,在某些时候我需要迭代 运行 HashSet 的所有元素中的一个算法,从一个元素开始。

所以如果我的集合包含数字 1,2,3,4,5。我想从 3 而不是 1 开始循环。这可能吗?

谢谢。

您可以将其复制到 ArrayList so that you might use subList(int, int); and then you might use a for-each loop 之类的

HashSet<Integer> set = new LinkedHashSet<>(Arrays.asList(1, 2, 3, 4, 5));
for (Integer i : new ArrayList<>(set).subList(2, set.size())) {
    System.out.println(i);
}

或者,您可以使用相同的方法直接获得一个 Iterator like

HashSet<Integer> set = new LinkedHashSet<>(Arrays.asList(1, 2, 3, 4, 5));
Iterator<Integer> iter = new ArrayList<>(set).subList(2, set.size())
        .iterator();
while (iter.hasNext()) {
    System.out.println(iter.next());
}

两者输出(请求的)

3
4
5

如果您使用 TreeSet 而不是 LinkedHashSet,则可以使用方法 tailSet()。如果您这样使用它:mySet.tailSet(3),它将 return 您的集合的 view(这也是一个 Set),仅包含 3, 4, 5.

'start the loop from 3'有两种可能的含义。您可能意味着您只需要列表中等于或大于 3 的项目。或者你可能意味着你想在按特定顺序排序时跳过前 2 个项目。我建议您在代码中明确说明您的意思。如果您正在使用 Java 8,那么流提供了一个很好的机制来做到这一点:

myHashSet.stream()
    .sorted(myComparator)
    .skip(2)
    .collect(Collectors.toList());

myHashSet.stream()
    .filter(n -> n >= 3)
    .collect(Collectors.toList());