我最近开始学习Java编程,并在下面的程序中尝试打印不同的数组元素,例如eG如果int arr[]={2,5,4,9,3,2,5,9,4}
,那么我希望只能获取一次数字,即< / p>
期望值 2 5 4 9 3
下面是我要执行此操作的代码,但是我得到的o / p不正确
我的输出:2 5 4 9.
谁能指出我在做什么错
答案 0 :(得分:6)
可以使用distinct()
方法(在Java 8中)通过Streams非常简单地完成此操作,
int arr[] = {2,5,4,9,3,2,5,9,4};
arr = Arrays.stream(arr).distinct().toArray();
for (int i : arr) {
System.out.print(i+" ");
// 2 5 4 9 3
}
答案 1 :(得分:6)
您也可以使用old
来Set
样式,该样式只能存储唯一值:
int arr[]={2,5,4,9,3,2,5,9,4};
Set<Integer> uniq = new HashSet<Integer>();
for (int x : arr) {
uniq.add(x);
}
System.out.println(uniq);
输出:
[2, 3, 4, 5, 9]
答案 2 :(得分:1)
Integer[] arr = { 1, 1, 2, 2, 3, 4, 5, 5 };
Set<Integer> set = new HashSet<>(Arrays.asList(arr));
ArrayList<Integer> distinct = new ArrayList<>(set);
或
List<Integer> distinct = new ArrayList<>();
distinct.addAll(Arrays.asList(arr));
Set<Integer> set = new HashSet<>();
distinct.removeIf(t -> !set.add(t));
测试
System.out.println("Before: " + Arrays.toString(arr));
System.out.println("After: " + Arrays.toString(distinct.toArray()));
输出
之前:[1、2、2、2、3、4、5、5]
之后:[1、2、3、4、5]
答案 3 :(得分:0)
您要在这里回答一个问题:您要按初始数组中给出的任何顺序或相同顺序返回不同的数组元素吗? / em>
如果您不想订购,那么@Scary Womabart的答案是绝对正确的。
但是,如果要保持顺序,请执行以下操作:使用 Set 进行查找。当您刚接触编程时,我正在编写详细的代码,以便您可以学习尽可能多的
public int[] getBackArrayWithoutDuplicatesMaintainingOrder(int[] arr) {
Set<Integer> lookupSet = new HashSet<>();
List<Integer> listWithoutDuplicates = new ArrayList<>();
for (int i = 0; i < arr.length; i++) {
if (lookupSet.contains(arr[i])) {
continue;
}
listWithoutDuplicates.add(arr[i]);
lookupSet.add(arr[i]);
}
int sz = listWithoutDuplicates.size();
int[] newArray = new int[sz];
for (int i = 0; i < sz; i++) {
newArray[i] = listWithoutDuplicates.get(i);
}
return newArray;
}
一旦您精通编程,便可以使用 LinkedHashSet 实现上述目标,因为它可以保持与 Set
不同的订购