Java 打印ArrayList的元素,不重复
我有一个Java 打印ArrayList的元素,不重复,java,arraylist,duplicates,Java,Arraylist,Duplicates,我有一个ArrayList,上面有重复的数字: 1 2 3 1 2 4 我要做的是让程序打印1,2,3,4,忽略已经打印的整数 我通常的方法是使用for循环遍历ArrayList,但我正在努力阻止元素重复。我想某种计数器系统可能会在这里工作,但我不确定是否能实现它,因此非常感谢您的帮助。当您迭代和打印时,在哈希集中累积元素,测试添加的返回值: if (set.add(item)) printItem(item); 如果序列不重要,请将列表转换为一个集合,然后打印它 否则,例如,在遍历过程中维
ArrayList
,上面有重复的数字:
1
2
3
1
2
4
我要做的是让程序打印1,2,3,4
,忽略已经打印的整数
我通常的方法是使用for循环遍历ArrayList,但我正在努力阻止元素重复。我想某种计数器系统可能会在这里工作,但我不确定是否能实现它,因此非常感谢您的帮助。当您迭代和打印时,在
哈希集中累积元素,测试添加的返回值:
if (set.add(item)) printItem(item);
如果序列不重要,请将列表转换为一个集合,然后打印它
否则,例如,在遍历过程中维护第二个列表,如果每个元素之前没有出现,则将其添加到列表中,并打印出来,如果它在检查表中,则跳过它。您可以通过设置轻松完成,而无需迭代
- 如果您想保持自然秩序,请使用
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));
首先将列表转换为集合,然后打印它。如果顺序不重要,则可以使用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);
}
List List=new ArrayList();
增加第(1)款;
增加(2);
增加(3);
增加第(1)款;
Set Set=新哈希集(列表);
for(整数:集){
系统输出打印项次(编号);
}
这将只打印唯一的数字
只需替换为TreeSet
即可获得有序的集合。为什么不使用集合来避免重复?HashSet
本身就是一个糟糕的选择,LinkedHashSet
更好。至少如果你打算使用addAll()
HashMap
这样的操作会是一个更好的选择。没有以前研究的证据-重复数据消除在Java列表中是一个众所周知的问题。您听说过LinkedHashSet
?我想这就是你想要建议的。+1尽管,考虑到这种行为会推广到所有列表,你可以将示例缩短为List number=Arrays.asList(2,1,3,3,4,1,2,5)代码>。
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);
}