1

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

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

谢谢。

4

3 回答 3

4

“从 3 开始循环”有两种可能的含义。您可能意味着您只需要列表中等于或大于 3 的项目。或者您可能意味着您希望在按特定顺序排序时跳过前 2 个项目。我建议您在代码中明确说明您的含义。如果您使用的是 Java 8,那么流提供了一个很好的机制来做到这一点:

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

或者

myHashSet.stream()
    .filter(n -> n >= 3)
    .collect(Collectors.toList());
于 2015-03-02T02:17:06.510 回答
2

您可以将其复制到一个ArrayList以便您可以使用subList(int, int); 然后你可能会使用像这样的for-each循环

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

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
于 2015-03-02T02:07:54.460 回答
1

如果您使用 aTreeSet而不是 a LinkedHashSet,则可以使用方法tailSet()。如果您以这种方式使用它:mySet.tailSet(3),它将返回您的集合的视图(也是 a Set),仅包含3, 4, 5.

于 2015-03-02T02:09:18.520 回答