在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};Setset = 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/76600.html