【Java技巧】如何在HashMap中插入重复的key?
问题引出
我们都知道,Map 的 key 需要保证唯一性。插入重复的 key 会被最后插入的 key 所覆盖,如:
Map<Integer, Integer> map = new HashMap<>();
map.put(1, 1);
map.put(1, 2);
System.out.println(map);
//{1=2}
那我如果需要同时保存二者,怎么做呢?
基本思想
我们知道一个类 new 一个对象,对象在堆中的地址肯定是不一样的,我们可以使用一个类来包装一下。
public class Inner <T>{
public T value;
public Inner(T v) {
value = v;
}
}
来看看效果:
public static void main(String[] args) {
Inner<Integer> i1 = new Inner<>(22);
Inner<Integer> i2 = new Inner<>(22);
System.out.println(i1 == i2);
Integer i11 = 22;
Integer i22 = 22;
System.out.println(i11 == i22);
}
// true
// false
可以发现,包装后地址肯定不一样。那么来试试能不能绕开 map 的去重。
Map<Inner<Integer>, Integer> map = new HashMap<>();
map.put(new Inner<>(1), 1);
map.put(new Inner<>(1), 2);
System.out.println(map);
// {algorithms.sort.heap_sort.Inner@4a574795=2, algorithms.sort.heap_sort.Inner@452b3a41=1}
地址不一样,肯定两个都存进去了。取的时候拿 Inner 对象,然后再取 Inner 的 value 值即可。