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);
  }