我有一个像a [] = {1,2,3,4,3,5}的数组,然后我想将第一个元素与第二,第三,第四元素进行比较,依此类推... 2元素具有3,4,3,5..then 3具有4,3,5 ...
我要在这里达到的目的是删除重复的元素。
public static void main(String[] args) {
int a[]= {1,2,1,4,5};
for (int i = 0; i < a.length; i++) {
for (int k = i + 1; k < a.length; k++) {
if (a[i] == a[k]) {
// shifting elements
for( k = i; k < a.length-1; k++) {
a[k] = a[k+1];
}
}
}
}
for(int l=0;l<a.length;l++)
System.out.println(a[l]);
}
预期:最后应该删除重复的元素,并且我的数组将具有[1,2,3,4,5]
答案 0 :(得分:0)
听起来很像您想对这个数组“去重复”。
有多种方法可以解决此问题,但是我更喜欢的方法是Java 8+中的Streams
(使用StreamEx
,Stream
的包装器来获取更多详细代码)。
在此处查看其他一些方式:https://www.baeldung.com/java-remove-duplicates-from-list
所以您要尝试执行的操作如下所示:
List<Integer> integersWithDupes = Arrays.asList(1, 2, 3, 4, 3, 5);
System.out.println(integersWithDupes.size()); // this is now 6
List<Integer> deduped = StreamEx.of(integersWithDupes).distinct().toList();
System.out.println(deduped.size()); // this is now 5
除非对分配有硬性要求,否则我将避免使用数组,而应使用List
接口。它包装了您尝试以更具表现力和更强大的方式完成的许多功能。
编码愉快!
答案 1 :(得分:0)
您可以为此使用IntStream
:
int[] a = {1,2,1,4,5};
int[] noDuplicates = IntStream.of(a).distinct().toArray();
IntStream.distinct
将跳过所有重复的元素,然后toArray()
将剩余的元素收集到新数组中。