ReverseMap
2015-08-28 00:00
369 查看
用于Key和value都唯一的Map,方便根据value查找
版权声明:本文为博主原创文章,未经博主允许不得转载。
public class ReverseMap<K, V> implements Map<K, V>{ private Map<V, K> reverseMap; private Map<K, V> map; public ReverseMap(Class<? extends Map> clazz) throws Exception { map = (Map) clazz.newInstance(); reverseMap = (Map)clazz.newInstance(); } public ReverseMap(){ map = new HashMap<>(); reverseMap = new HashMap<>(); } public Map<V, K> getReverseMap(){ return reverseMap; } @Override public void clear() { map.clear(); reverseMap.clear(); } @Override public boolean containsKey(Object key) { return map.containsKey(key); } @Override public boolean containsValue(Object value) { return map.containsValue(value); } @Override public Set<Entry<K, V>> entrySet() { return map.entrySet(); } @Override public V get(Object key) { return map.get(key); } public K getKey(Object value){ return reverseMap.get(value); } @Override public boolean isEmpty() { return map.isEmpty(); } @Override public Set<K> keySet() { return map.keySet(); } public Set<V> valueSet(){ return reverseMap.keySet(); } @Override public V put(K key, V value) { if(reverseMap.containsKey(value)){ throw new RuntimeException("have duplicates value " + value); } reverseMap.put(value, key); return map.put(key, value); } @Override public void putAll(Map<? extends K, ? extends V> map) { Map<? extends V, ? extends K> temp = CollectionUtil.reverseMap(map, true); this.map.putAll(map); this.reverseMap.putAll(temp); } @Override public V remove(Object key) { reverseMap.remove(map.get(key)); return map.remove(key); } @Override public int size() { return map.size(); } @Override public Collection<V> values() { return map.values(); } } public class CollectionUtil { public static <K, V> Map<K, V> reverseMap(Map<V, K> map, boolean canReplace){ Map<K, V> newMap = new HashMap<>(); for(Map.Entry<V, K> entry : map.entrySet()){ if(!canReplace && newMap.containsKey(entry.getValue())){ throw new RuntimeException("have duplicates value " + entry.getValue()); } newMap.put(entry.getValue(), entry.getKey()); } return newMap; } }
版权声明:本文为博主原创文章,未经博主允许不得转载。
相关文章推荐
- java对世界各个时区(TimeZone)的通用转换处理方法(转载)
- java-注解annotation
- java-模拟tomcat服务器
- java-用HttpURLConnection发送Http请求.
- java-WEB中的监听器Lisener
- Android IPC进程间通讯机制
- Android Native 绘图方法
- Android java 与 javascript互访(相互调用)的方法例子
- 介绍一款信息管理系统的开源框架---jeecg
- 聚类算法之kmeans算法java版本
- java实现 PageRank算法
- PropertyChangeListener简单理解
- Python中map()函数浅析
- 插入排序
- 冒泡排序
- 堆排序
- 快速排序
- 二叉查找树