All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.hfg.util.collection.BiHashMap Maven / Gradle / Ivy

There is a newer version: 20240423
Show newest version
package com.hfg.util.collection;

import java.util.HashMap;
import java.util.Map;


//------------------------------------------------------------------------------
/**
 Simple implementation of a bi-directional map.
 
@author J. Alex Taylor, hairyfatguy.com
*/ //------------------------------------------------------------------------------ // com.hfg Library // // This library is free software; you can redistribute it and/or // modify it under the terms of the GNU Lesser General Public // License as published by the Free Software Foundation; either // version 2.1 of the License, or (at your option) any later version. // // This library is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU // Lesser General Public License for more details. // // You should have received a copy of the GNU Lesser General Public // License along with this library; if not, write to the Free Software // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA // // J. Alex Taylor, President, Founder, CEO, COO, CFO, OOPS hairyfatguy.com // [email protected] //------------------------------------------------------------------------------ public class BiHashMap extends HashMap implements BiMap { private Map mReverseMap; //########################################################################## // CONSTRUCTORS //########################################################################## //-------------------------------------------------------------------------- public BiHashMap() { super(); init(null); } //-------------------------------------------------------------------------- public BiHashMap(int inInitialSize) { super(inInitialSize); init(inInitialSize); } //-------------------------------------------------------------------------- private void init(Integer inInitialSize) { if (inInitialSize != null) { mReverseMap = new HashMap<>(inInitialSize); } else { mReverseMap = new HashMap<>(); } } //########################################################################## // PUBLIC METHODS //########################################################################## //-------------------------------------------------------------------------- /** Performs a reverse lookup on the Map. * @param inValue the value to use * @return the key associated with the value */ public K getKey(V inValue) { return mReverseMap.get(inValue); } //-------------------------------------------------------------------------- @Override public V put(K inKey, V inValue) { mReverseMap.put(inValue, inKey); return super.put(inKey, inValue); } //-------------------------------------------------------------------------- @Override public void putAll(Map inValues) { if (CollectionUtil.hasValues(inValues)) { for (K key : inValues.keySet()) { mReverseMap.put(inValues.get(key), key); } } super.putAll(inValues); } //-------------------------------------------------------------------------- @Override public V putIfAbsent(K inKey, V inValue) { mReverseMap.putIfAbsent(inValue, inKey); return super.putIfAbsent(inKey, inValue); } //-------------------------------------------------------------------------- @Override public void clear() { mReverseMap.clear(); super.clear(); } //-------------------------------------------------------------------------- @Override public V remove(Object inKey) { mReverseMap.remove(get(inKey)); return super.remove(inKey); } //-------------------------------------------------------------------------- @Override public V replace(K inKey, V inValue) { mReverseMap.remove(get(inKey)); mReverseMap.put(inValue, inKey); return super.replace(inKey, inValue); } //-------------------------------------------------------------------------- @Override public boolean containsValue(Object inValue) { return mReverseMap.containsKey(inValue); } }




© 2015 - 2024 Weber Informatics LLC | Privacy Policy