参看如下代码和注释:
public class TestMain {
public static void main(String[] args) throws ClassNotFoundException {
//定义一个数组
int[] array = new int[]{1, 2, 3, 6, 6, 6, 8, 9, 1, 3, 5, 9, 6};
//定义LinkedHashMap,可以保证加入的元素的顺序性,key代表数组值,value代表数组值所在的位置
Map<Integer, List<Integer>> listMap = new LinkedHashMap<>();
//循环数组
for (int i = 0; i < array.length; i++) {
//取得下标对应的数组值
int number = array[i];
//以这个值为key获取代表其所在的位置的value值
List<Integer> positions = listMap.get(number);
//如果为空,说明这个key值还没遍历过,所以做新增操作
if (CollectionUtils.isEmpty(positions) || positions.size() == 0) {
positions = Lists.newArrayList();
positions.add(i);
//以数组值为key,数组下标集合为value
listMap.put(number, positions);
} else {
//如果这个key值已经遍历过一次,就把这个重复的位置添加到它对应的value数组里
positions.add(i);
}
}
//遍历看下重复的元素和它的位置在哪
for (Map.Entry<Integer, List<Integer>> map : listMap.entrySet()) {
Integer key = map.getKey();
List<Integer> value = map.getValue();
if (value.size() > 1) {
Object[] valueArray = value.toArray();
System.out.println(key + "元素重复," + "它的位置是" + Arrays.toString(valueArray));
}
}
}
}
运行结果如下:
能够成功的打印出一维数组中的重复元素和它的位置。