我在我的代码中使用LinkedHashSet,并且在某些时候我需要从元素开始迭代并在HashSet的所有元素中运行算法。
所以如果我的集合包含数字1,2,3,4,5。我想从3而不是1开始循环。这可能吗?
感谢。
答案 0 :(得分:4)
“从3开始循环”有两种可能的含义。您可能意味着您只需要列表中等于或大于3的项目。或者您可能意味着您希望在按特定顺序排序时跳过前2项。我建议你在代码中明确说明你的意思。如果您使用的是Java 8,则流提供了一个很好的机制来执行此操作:
myHashSet.stream()
.sorted(myComparator)
.skip(2)
.collect(Collectors.toList());
或
myHashSet.stream()
.filter(n -> n >= 3)
.collect(Collectors.toList());
答案 1 :(得分:2)
您可以将其复制到ArrayList
,以便使用subList(int, int)
;然后你可以使用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
之类的
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
答案 2 :(得分:1)
如果您使用TreeSet
而不是LinkedHashSet
,则可以使用方法tailSet()
。如果您以这种方式使用它:mySet.tailSet(3)
,它将返回您的集合的视图(也是Set
),仅包含3, 4, 5
。