本文介绍使用map集合去重(效率比set更高更常用),并输出重复元素原集合里的初始位置和最后出现的位置

需求:对于一个具有重复值的集合,使用map去重而不是使用set,输出去重后的值并同时输出去重后的值在原集合中的第一次出现的位置和最后一次出现的位置

核心思想:map集合的特点是值以键值对的形式存在,在往里面put(key,value)时,key不能重复, key“可以”重复。例如:先put(1,3),中间put(key,value)n次后又put(1,9),那么map集合最终保存的是(1,9)。 基于这个思想,则将arrayList中的元素作为key值存入map,把循环的i作为value存入,所以,在循环遍历put()时,后面重复的key会覆盖掉前面的key,达到去重的目的,而i保存的值则是对应key在原集合arrayList中出现的位置。

public class practice02 {

public static void main(String[] args) {

ArrayList arrayList = new ArrayList<>();

for (int i=1;i<10;i++){

arrayList.add(i);

}

for (int i=2;i<6;i++){

arrayList.add(i);

}

System.out.println("源数据集合为:");

System.out.println(arrayList);//查看具有重复元素的源数据

HashMap hashMap = new HashMap<>();

HashMap hashMap1 = new HashMap<>();

//建立两个map集合,hashmap用来得出重复元素在原集合中最后出现的位置,

//hashMap1用来得出重复元素在原集合中首次出现的位置

for (int i=0;i

hashMap.put(arrayList.get(i),i);

//后面出现重复的元素时,覆盖掉前面的元素,而i不会覆盖,只会自增,这样i记录的就是

//重复元素出现的最后的位置

if (!hashMap1.containsKey(arrayList.get(i))){

//如果不包含,则往新的空的hashMap1中存入数据,即碰到重复的元素时,就不写入进hashMap1

//这样i就记录了第一次出现的位置。

hashMap1.put(arrayList.get(i),i);

}

}

System.out.println("去重后的元素为:");

//两个集合的key值都是去重后的值,遍历哪一个都行

hashMap.forEach((k,v)->{

System.out.print(k+",");

});

System.out.println();

hashMap.forEach((k,v)->{

System.out.println(k+"最后一次出现的位置为:"+hashMap.get(k));

});

hashMap1.forEach((k,v)->{

System.out.println(k+"第一次出现的位置为:"+hashMap1.get(k));

});

}

}

输出结果:

源数据集合为:

[1, 2, 3, 4, 5, 6, 7, 8, 9, 2, 3, 4, 5]

去重后的元素为:

1,2,3,4,5,6,7,8,9,

1最后一次出现的位置为:0

2最后一次出现的位置为:9

3最后一次出现的位置为:10

4最后一次出现的位置为:11

5最后一次出现的位置为:12

6最后一次出现的位置为:5

7最后一次出现的位置为:6

8最后一次出现的位置为:7

9最后一次出现的位置为:8

1第一次出现的位置为:0

2第一次出现的位置为:1

3第一次出现的位置为:2

4第一次出现的位置为:3

5第一次出现的位置为:4

6第一次出现的位置为:5

7第一次出现的位置为:6

8第一次出现的位置为:7

9第一次出现的位置为:8

查看原文