Advertisement
Guest User

SetPairMap

a guest
Jan 15th, 2016
114
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 3.31 KB | None | 0 0
  1. import java.util.HashMap;
  2. import java.util.HashSet;
  3. import java.util.Set;
  4.  
  5. public class SetPairMap<K,V> {
  6.  
  7.     private HashMap<K,Set<V>> keyMap;
  8.    
  9.     private HashMap<V,Set<K>> valueMap;
  10.    
  11.     public SetPairMap(){
  12.          keyMap = new HashMap<K,Set<V>>();
  13.          valueMap = new HashMap<V,Set<K>>();
  14.     }
  15.    
  16.     public SetPairMap(int size) {
  17.         keyMap = new HashMap<K,Set<V>>(size);
  18.         valueMap = new HashMap<V,Set<K>>(size*4);
  19.     }
  20.  
  21.     public void put(K key,V val){
  22.        
  23.         if(!keyMap.containsKey(key)){
  24.             keyMap.put(key, new HashSet<V>());
  25.         }
  26.         keyMap.get(key).add(val);
  27.        
  28.         if(!valueMap.containsKey(val)){
  29.             valueMap.put(val, new HashSet<K>());
  30.         }
  31.         valueMap.get(val).add(key);
  32.        
  33.     }
  34.    
  35.     public void removeKey(K key){
  36.         if(!keyMap.containsKey(key)){
  37.             return;
  38.         }
  39.         Object[] keys = keyMap.get(key).toArray();
  40.        
  41.         for(int i = 0; i < keys.length; i++){
  42.             @SuppressWarnings("unchecked")
  43.             V val = (V) keys[i];
  44.             valueMap.get(val).remove(key);
  45.             if(valueMap.get(val).size() == 0){
  46.                 valueMap.remove(val);
  47.             }
  48.         }
  49.         keyMap.remove(key);    
  50.     }
  51.    
  52.     public void removeValue(V val){
  53.         if(valueMap.get(val) == null){
  54.             return;
  55.         }
  56.         Object[] keys = valueMap.get(val).toArray();
  57.        
  58.         for(int i = 0; i < keys.length; i++){
  59.             @SuppressWarnings("unchecked")
  60.             K key = (K) keys[i];
  61.             if(keyMap.containsKey(key)){
  62.             keyMap.get(key).remove(val);
  63.             if(keyMap.get(key).size() == 0){
  64.                 keyMap.remove(key);
  65.             }
  66.             }
  67.         }
  68.         valueMap.remove(val);      
  69.        
  70.     }
  71.    
  72.     public Set<V> getValues(){
  73.         return valueMap.keySet();
  74.     }
  75.    
  76.     public Set<V> get(K key){
  77.         return keyMap.get(key);
  78.     }
  79.    
  80.     @Override
  81.     public String toString(){
  82.         return "Key Map: "+keyMap + "\n" + "Value Map: "+valueMap;
  83.     }
  84.    
  85.     public boolean keyIsMappedToValue(K key, V val){
  86.        
  87.         if(keyMap.get(key) != null  && !keyMap.isEmpty()){
  88.             if(keyMap.get(key).contains(val)){
  89.                 return true;
  90.             }
  91.         }
  92.        
  93.         return false;
  94.        
  95.     }
  96.    
  97.     public boolean valueIsMappedToKey(K key, V val){
  98.         if(valueMap.get(val) != null  && !valueMap.isEmpty()){
  99.             if(valueMap.get(val).contains(key)){
  100.                 return true;
  101.             }
  102.         }
  103.         return false;
  104.     }
  105.    
  106.     public Set<K> getKeysOfValue(V val){
  107.         return valueMap.get(val);
  108.     }
  109.    
  110.     public Set<K> getKeys(){
  111.         return keyMap.keySet();
  112.     }
  113.  
  114.     public boolean containsKey(K key) {
  115.         return this.keyMap.containsKey(key);
  116.     }
  117.  
  118.     public int size(){
  119.         return this.keyMap.keySet().size();
  120.     }
  121.  
  122.     public void clear() {
  123.         keyMap.clear();
  124.         valueMap.clear();
  125.        
  126.     }
  127.    
  128.     public void removeValueAtKey(K k, V v){
  129.         if(keyMap.containsKey(k)){
  130.             keyMap.get(k).remove(v);
  131.             if(keyMap.get(k).isEmpty()){
  132.                 keyMap.remove(k);
  133.             }
  134.             if(valueMap.containsKey(v)){
  135.                 valueMap.get(v).remove(k);
  136.                 if(valueMap.get(v).isEmpty()){
  137.                     valueMap.remove(v);
  138.                 }
  139.             }
  140.         }
  141.     }
  142.    
  143.     public void removeSetOfValues(Set<V> values){
  144.         for(V v: values){
  145.             this.removeValue(v);
  146.         }
  147.     }
  148.  
  149.     public boolean containsValue(V val) {  
  150.     //  System.out.println(keyMap.values()+":"+valueMap.keySet());
  151.         return this.valueMap.containsKey(val);
  152.     }
  153.    
  154.     /**Returns the first available key at the value.
  155.      * valueMap.get(VALUE).toArray()[0] <--
  156.      * If it is in the valueMap.
  157.      * */
  158.     @SuppressWarnings("unchecked")
  159.     public K getAvailableKeyOfValue(V val){
  160.         if(valueMap.containsKey(val)){
  161.             return (K) valueMap.get(val).toArray()[0];
  162.         }
  163.         return null;
  164.     }
  165.    
  166. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement