在Java中,处理二维数组去重的问题可以通过以下几种方法实现:
使用HashSet
将二维数组扁平化为一维数组,然后使用HashSet去重。
将去重后的一维数组重新转换为二维数组。
int[][] originalArray = {{1, 2, 3}, {4, 5, 6}, {1, 2, 3}};
Set
set = new HashSet<>(); for (int[] row : originalArray) {
for (int num : row) {
set.add(num);
}
}
int[][] distinctArray = new int[set.size()][];
int i = 0;
for (int num : set) {
distinctArray[i++] = new int[]{num};
}
使用HashMap
遍历二维数组,将元素作为HashMap的键,值可以设为任意非空对象(例如1)。
将HashMap的键转换为数组。
int[][] originalArray = {{1, 2, 3}, {4, 5, 6}, {1, 2, 3}};
Map
map = new HashMap<>(); for (int[] row : originalArray) {
for (int num : row) {
map.put(num, 1);
}
}
int[][] distinctArray = new int[map.size()][];
int i = 0;
for (Map.Entry
entry : map.entrySet()) { distinctArray[i++] = new int[]{entry.getKey()};
}
使用Java 8的Stream API
将二维数组转换为一维数组,然后使用`Arrays.stream().distinct().toArray()`去重。
import java.util.Arrays;
int[][] originalArray = {{1, 2, 3}, {4, 5, 6}, {1, 2, 3}};
int[] flattenedArray = Arrays.stream(originalArray).flatMapToInt(Arrays::stream).toArray();
int[] distinctArray = Arrays.stream(flattenedArray).distinct().toArray();
int[][] resultArray = new int[distinctArray.length][];
for (int i = 0; i < distinctArray.length; i++) {
resultArray[i] = new int[]{distinctArray[i]};
}
以上方法都可以实现二维数组去重,具体选择哪种方法取决于你对去重后数组顺序的保留需求以及代码的简洁性。如果你需要保留原始二维数组的顺序,那么使用LinkedHashSet或保持原数组顺序的方法可能更适合你。如果你不关心去重后数组的顺序,那么使用HashSet或HashMap可能更加高效