Java Hashmap: How to get key from value?

前端 未结 30 2239
忘掉有多难
忘掉有多难 2020-11-22 02:14

If I have the value \"foo\", and a HashMap ftw for which ftw.containsValue(\"foo\") returns true, how can I

30条回答
  •  迷失自我
    2020-11-22 03:18

    import java.util.HashMap;
    import java.util.HashSet;
    import java.util.Set;
    
    public class ValueKeysMap extends HashMap {
        HashMap> ValueKeysMap = new HashMap>();
    
        @Override
        public boolean containsValue(Object value) {
            return ValueKeysMap.containsKey(value);
        }
    
        @Override
        public V put(K key, V value) {
            if (containsValue(value)) {
                Set keys = ValueKeysMap.get(value);
                keys.add(key);
            } else {
                Set keys = new HashSet();
                keys.add(key);
                ValueKeysMap.put(value, keys);
            }
            return super.put(key, value);
        }
    
        @Override
        public V remove(Object key) {
            V value = super.remove(key);
            Set keys = ValueKeysMap.get(value);
            keys.remove(key);
            if(keys.size() == 0) {
               ValueKeysMap.remove(value);
            }
            return value;
        }
    
        public Set getKeys4ThisValue(V value){
            Set keys = ValueKeysMap.get(value);
            return keys;
        }
    
        public boolean valueContainsThisKey(K key, V value){
            if (containsValue(value)) {
                Set keys = ValueKeysMap.get(value);
                return keys.contains(key);
            }
            return false;
        }
    
        /*
         * Take care of argument constructor and other api's like putAll
         */
    }
    

提交回复
热议问题