所以,我有两个 hashMaps
public HashMap<String, Integer> map1 = new HashMap<String,Integer>();
public HashMap<String, Integer> map2 = new HashMap<String,Integer>();
我想创建一个哈希图,它由合并的这两个哈希图组成。
此外,当我向这两个哈希图中的任何一个添加元素时:
map1.put("key",1);
第三个 hashmap 应该有这个变化
解决方案:
import java.util.*;
public final class JoinedMap {
static class JoinedMapView<K,V> implements Map<K,V> {
private final Map<? extends K,? extends V>[] items;
public JoinedMapView(final Map<? extends K,? extends V>[] items) {
this.items = items;
}
@Override
public int size() {
int ct = 0;
for (final Map<? extends K,? extends V> map : items) {
ct += map.size();
}
return ct;
}
@Override
public boolean isEmpty() {
for (final Map<? extends K,? extends V> map : items) {
if(map.isEmpty()) return true;
}
return false;
}
@Override
public boolean containsKey(Object key) {
for (final Map<? extends K,? extends V> map : items) {
if(map.containsKey(key)) return true;
}
return false;
}
@Override
public boolean containsValue(Object value) {
for (final Map<? extends K,? extends V> map : items) {
if(map.containsValue(value)) return true;
}
return false;
}
@Override
public V get(Object key) {
for (final Map<? extends K,? extends V> map : items) {
if(map.containsKey(key)){
return map.get(key);
}
}
return null;
}
@Override
public V put(K key, V value) {
throw new UnsupportedOperationException();
}
@Override
public V remove(Object key) {
throw new UnsupportedOperationException();
}
@Override
public void putAll(Map<? extends K, ? extends V> m) {
throw new UnsupportedOperationException();
}
@Override
public void clear() {
for (final Map<? extends K,? extends V> map : items) {
map.clear();
}
}
@Override
public Set<K> keySet() {
Set<K> mrgSet = new HashSet<K>();
for (final Map<? extends K,? extends V> map : items) {
mrgSet.addAll(map.keySet());
}
return mrgSet;
}
@Override
public Collection<V> values() {
Collection<V> values = new ArrayList<>();
for (final Map<? extends K,? extends V> map : items) {
values.addAll(map.values());
}
return values;
}
@Override
public Set<Entry<K, V>> entrySet() {
throw new UnsupportedOperationException();
}
}
/**
* Returns a live aggregated map view of the maps passed in.
* None of the above methods is thread safe (nor would there be an easy way
* of making them).
*/
public static <K,V> Map<K,V> combine(
final Map<? extends K, ? extends V>... items) {
return new JoinedMapView<K,V>(items);
}
private JoinedMap() {
}
}