Java tutorial
/* * Copyright 2009 by pactera.edg.am Corporation. * Address:HePingLi East Street No.11 5-5, BeiJing, * * All rights reserved. * * This software is the confidential and proprietary information of * pactera.edg.am Corporation ("Confidential Information"). You * shall not disclose such Confidential Information and shall use * it only in accordance with the terms of the license agreement * you entered into with pactera.edg.am. */ /** * */ package com.pactera.edg.am.metamanager.extractor.util; import java.io.Serializable; import java.util.Collection; import java.util.Map; import java.util.Set; import org.apache.commons.collections.MultiMap; import org.apache.commons.collections.map.MultiValueMap; /** * ??MultiMap?MultiMap<br> * ??KeyValue??ValueKey * * @author fbchen * @version 1.0 Date: 2010-1-19 ?10:33:46 */ public class TwoWayMultiMap implements MultiMap, Serializable { private static final long serialVersionUID = 1L; MultiMap keyMultiMap = new MultiValueMap(); MultiMap valMultiMap = new MultiValueMap(); /** * ??MultiMap */ public TwoWayMultiMap() { super(); } /** * key-<valuekeyMultiMapvalue-<keyvalMultiMap * @param key keyMultiMapKeyvalMultiMapValue * @param value keyMultiMapValuevalMultiMapKey * @return value */ public Object put(Object key, Object value) { keyMultiMap.put(key, value); valMultiMap.put(value, key); return value; } /** * ??Value */ public boolean containsValue(Object value) { return valMultiMap.containsKey(value); } /** * ??Key */ public boolean containsKey(Object key) { return keyMultiMap.containsKey(key); } /** * ?Value?Key * @param value * @return ? */ public Collection<?> getByValue(Object value) { return (Collection<?>) valMultiMap.get(value); } /** * ?Key?Value * @param key * @return ? */ public Collection<?> getByKey(Object key) { return (Collection<?>) keyMultiMap.get(key); } /** * ?Value?Key * @param value * @return */ public Object getOneByValue(Object value) { Collection<?> c = (Collection<?>) valMultiMap.get(value); return c.isEmpty() ? null : c.iterator().next(); } /** * ?Key?Value * @param key * @return */ public Object getOneByKey(Object key) { Collection<?> c = (Collection<?>) keyMultiMap.get(key); return c.isEmpty() ? null : c.iterator().next(); } public Object removeByKey(Object key) { return keyMultiMap.remove(key); } public Object removeByKey(Object key, Object value) { return keyMultiMap.remove(key, value); } public Object removeByValue(Object value) { return valMultiMap.remove(value); } public Object removeByValue(Object value, Object key) { return valMultiMap.remove(value, key); } /** * ?keyMultiMapvalMultiMap */ public void clear() { keyMultiMap.clear(); valMultiMap.clear(); } public boolean isEmpty() { return keyMultiMap.isEmpty() && valMultiMap.isEmpty(); } /** * @return the keyMultiMap */ public MultiMap getKeyMultiMap() { return keyMultiMap; } /** * @return the valMultiMap */ public MultiMap getValMultiMap() { return valMultiMap; } @SuppressWarnings("unchecked") public Set entrySet() { return keyMultiMap.entrySet(); } @SuppressWarnings("unchecked") public Set keySet() { return keyMultiMap.keySet(); } @SuppressWarnings("unchecked") public Collection values() { return keyMultiMap.values(); } @SuppressWarnings("unchecked") public void putAll(Map map) { keyMultiMap.putAll(map); } /** * @see #getByKey(Object) */ public Object get(Object key) { return this.getByKey(key); } /** * @see #removeByKey(Object,Object) */ public Object remove(Object key, Object value) { return this.removeByKey(key, value); } /** * @see #removeByKey(Object) */ public Object remove(Object key) { return this.removeByKey(key); } /** * keyMultiMapsize */ public int size() { return keyMultiMap.size(); } }