在java实现数组去重 记录复原所需要的源代码
时间: 2024-09-20 07:04:43 浏览: 31
在Java中,有几种方法可以实现数组去重,并同时记录下原始元素及其索引以便后续复原。这里我会介绍一种常见的方法,即使用HashSet来存储唯一的元素,同时利用HashMap保存每个元素对应的索引。以下是简单的示例:
```java
import java.util.*;
public class UniqueArray {
private int[] array;
private HashSet<Integer> uniqueSet;
private Map<Integer, Integer> indexMap;
public UniqueArray(int[] array) {
this.array = array;
this.uniqueSet = new HashSet<>();
this.indexMap = new HashMap<>();
for (int i = 0; i < array.length; i++) {
if (!uniqueSet.contains(array[i])) {
uniqueSet.add(array[i]);
indexMap.put(array[i], i);
}
}
}
// 去重后的数组(只包含唯一元素)
public int[] getUniqueArray() {
return uniqueSet.toArray(new Integer[0]);
}
// 获取原始数组中对应唯一元素的索引
public int getIndex(int element) {
return indexMap.getOrDefault(element, -1); // 如果元素不在map里,返回-1表示未找到
}
// 示例如何复原原始数组
public void restoreOriginalArray() {
int[] restoredArray = new int[array.length];
int count = 0;
for (Integer unique : uniqueSet) {
restoredArray[count++] = unique;
}
System.arraycopy(restoredArray, 0, array, 0, count);
}
}
// 使用示例
public static void main(String[] args) {
int[] originalArray = {1, 2, 2, 3, 4, 4, 5};
UniqueArray uniqueArray = new UniqueArray(originalArray);
// 输出去重后的数组
System.out.println(Arrays.toString(uniqueArray.getUniqueArray()));
// 获取某个元素的索引并复原原始数组
int index = uniqueArray.getIndex(3);
if (index != -1) {
uniqueArray.restoreOriginalArray();
System.out.println("Restored array: " + Arrays.toString(originalArray));
} else {
System.out.println("Element not found in the original array.");
}
}
```
阅读全文