我有ArrayList
个数字重复:
1
2
3
1
2
4
我想要做的是让程序打印1,2,3,4
并忽略已经打印的整数。
我通常采用的方法是使用for循环遍历ArrayList,但我正在努力阻止元素重复。我当时认为某种类型的计数器系统可能会在这里起作用,但我不确定它的实现,所以任何帮助都会受到赞赏。
答案 0 :(得分:5)
在迭代和打印时,在HashSet
中累积元素,测试add
的返回值:
if (set.add(item)) printItem(item);
答案 1 :(得分:3)
您可以使用Set
轻松完成此操作,而无需迭代。
TreeSet
LinkedHashSet
示例强>
List<Integer> numbers = Arrays.asList(2,1,3,3,4,1,2,5);
System.out.printf("Natural ordering: %s%n", new TreeSet<Integer>(numbers));
System.out.printf("Ordering based on insertion order: %s%n", new LinkedHashSet<Integer>(numbers));
<强>输出强>
Natural ordering: [1, 2, 3, 4, 5]
Ordering based on insertion order: [2, 1, 3, 4, 5]
答案 2 :(得分:0)
如果序列不重要,请将列表转换为集合然后打印。
否则,例如在遍历期间维护第二个列表,如果之前没有出现并将其打印出来,则将每个元素添加到其中,如果它在清单中,则跳过它。
答案 3 :(得分:0)
首先转换列表进行设置然后再打印。如果订单不重要,那么您可以使用HashSet
。
List<Integer> list = new ArrayList<>();
list.add(1);
list.add(2);
list.add(3);
list.add(1);
Set<Integer> set = new HashSet<>(list);
for(Integer number : set){
System.out.println(number);
}
这将只打印唯一的数字。
只需替换为TreeSet
即可获得有序集。