在Java中,去除数组中的重复素可以通过以下几种方法实现:
1. 使用`HashSet`或`LinkedHashSet`:
`HashSet`不保留素插入顺序,适合不关心素顺序的情况。
`LinkedHashSet`保留素插入顺序,适合需要保持原始顺序的情况。
import java.util.Arrays;
import java.util.HashSet;
import java.util.LinkedHashSet;
public class RemoveDuplicatesFromArray {
public static void main(String[] args) {
Integer[] arr = {1, 2, 3, 4, 3, 2, 1};
Set
set = new HashSet<>(); for (int num : arr) {
set.add(num);
}
Integer[] distinctArr = set.toArray(new Integer);
System.out.println(Arrays.toString(distinctArr));
}
}
2. 使用`Arrays.stream().distinct().toArray()`方法(Java 8及以上版本):
import java.util.Arrays;
public class RemoveDuplicatesFromArray {
public static void main(String[] args) {
Integer[] arr = {1, 2, 3, 4, 3, 2, 1};
Integer[] distinctArr = Arrays.stream(arr).distinct().toArray(Integer[]::new);
System.out.println(Arrays.toString(distinctArr));
}
}
3. 双层循环检查法:
public class RemoveDuplicatesFromArray {
public static void main(String[] args) {
Integer[] arr = {1, 2, 3, 4, 3, 2, 1};
int[] distinctArr = new int[arr.length];
int index = 0;
for (int i = 0; i < arr.length; i++) {
boolean isDuplicate = false;
for (int j = i + 1; j < arr.length; j++) {
if (arr[i].equals(arr[j])) {
isDuplicate = true;
break;
}
}
if (!isDuplicate) {
distinctArr[index++] = arr[i];
}
}
distinctArr = Arrays.copyOf(distinctArr, index);
System.out.println(Arrays.toString(distinctArr));
}
}
4. 使用`System.arraycopy`方法:
public class RemoveDuplicatesFromArray {
public static void main(String[] args) {
Integer[] arr = {1, 2, 3, 4, 3, 2, 1};
int[] distinctArr = new int[arr.length];
int j = 0;
for (int i = 0; i < arr.length; i++) {
boolean isDuplicate = false;
for (int k = i + 1; k < arr.length; k++) {
if (arr[i].equals(arr[k])) {
isDuplicate = true;
break;
}
}
if (!isDuplicate) {
distinctArr[j++] = arr[i];
}
}
int[] finalDistinctArr = new int[j];
System.arraycopy(distinctArr, 0, finalDistinctArr, 0, j);
System.out.println(Arrays.toString(finalDistinctArr));
}
}
以上方法均可用于去除数组中的重复素,具体选择哪种方法取决于你对素顺序的保留需求以及是否关心性能。`HashSet`和`LinkedHashSet`方法在大多数情况下性能较好,而`Arrays.stream().distinct().toArray()`方法则利用了Java 8的流特性,代码简洁。双层循环检查法虽然直观,但效率较低。使用`System.arraycopy`可以在原数组的基础上直接操作,减少内存分配。
请根据你的具体需求选择合适的方法
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://sigusoft.com/bj/145285.html