⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 identitymap.java

📁 用Java实现的23个常用设计模式源代码
💻 JAVA
字号:
//$Id: IdentityMap.java,v 1.6.2.6 2003/11/29 07:55:15 oneovthafew Exp $package net.sf.hibernate.util;import java.io.Serializable;import java.util.ArrayList;import java.util.Collection;import java.util.HashMap;import java.util.HashSet;import java.util.Iterator;import java.util.List;import java.util.Map;import java.util.Set;import org.apache.commons.collections.SequencedHashMap;/** * A <tt>Map</tt> where keys are compared by object identity, * rather than <tt>equals()</tt>. */public final class IdentityMap implements Map {		/**	 * Return a new instance of this class, with an undefined	 * iteration order	 * 	 * @return Map	 */	public static Map instantiate(int size) {		return new IdentityMap( new HashMap(size) );	}		/**	 * Return a new instance of this class, with iteration	 * order defined by the order that entries were added	 */	public static Map instantiateSequenced(int size) {		return new IdentityMap( new SequencedHashMap(size) );	}		private IdentityMap(Map underlyingMap) {		map = underlyingMap;	}		/**	 * Return the map entries (as instances of <tt>Map.Entry</tt> in a collection that	 * is safe from concurrent modification). ie. we may safely add new instances to	 * the underlying <tt>Map</tt> during iteration of the <tt>entries()</tt>.	 * 	 * @param map	 * @return Collection	 */	public static List concurrentEntries(Map map) {		return ( (IdentityMap) map ).entryList();	}	public static List entries(Map map) {		return ( (IdentityMap) map ).entryList();	}		public static Iterator keyIterator(Map map) {		return ( (IdentityMap) map ).keyIterator();	}		public Iterator keyIterator() {		return new KeyIterator( map.keySet().iterator() );	}		private final Map map;		public static final class IdentityMapEntry implements java.util.Map.Entry {		IdentityMapEntry(Object key, Object value) {			this.key=key;			this.value=value;		}		private Object key;		private Object value;		public Object getKey() {			return key;		}				public Object getValue() {			return value;		}				public Object setValue(Object value) {			Object result = this.value;			this.value = value;			return result;		}	}		public static final class IdentityKey implements Serializable {		private Object key;				IdentityKey(Object key) {			this.key=key;		}		public boolean equals(Object other) {			return key == ( (IdentityKey) other ).key;		}		public int hashCode() {			return System.identityHashCode(key);		}	}	public int size() {		return map.size();	}		public boolean isEmpty() {		return map.isEmpty();	}		public boolean containsKey(Object key) {		IdentityKey k = new IdentityKey(key);		return map.containsKey(k);	}		public boolean containsValue(Object val) {		return map.containsValue(val);	}		public Object get(Object key) {		IdentityKey k = new IdentityKey(key);		return map.get(k);	}		public Object put(Object key, Object value) {		return map.put( new IdentityKey(key), value );	}		public Object remove(Object key) {		IdentityKey k = new IdentityKey(key);		return map.remove(k);	}		public void putAll(Map otherMap) {		Iterator iter = otherMap.entrySet().iterator();		while ( iter.hasNext() ) {			Map.Entry me = (Map.Entry) iter.next();			put( me.getKey(), me.getValue() );		}	}		public void clear() {		map.clear();	}		public Set keySet() {		// would need an IdentitySet for this!		throw new UnsupportedOperationException();	}		public Collection values() {		return map.values();	}		public Set entrySet() {		Set set = new HashSet( map.size() );		Iterator iter = map.entrySet().iterator();		while ( iter.hasNext() ) {			Map.Entry me = (Map.Entry) iter.next();			set.add( new IdentityMapEntry( ( (IdentityKey) me.getKey() ).key, me.getValue() ) );		}		return set;	}	public List entryList() {		ArrayList list = new ArrayList( map.size() );		Iterator iter = map.entrySet().iterator();		while ( iter.hasNext() ) {			Map.Entry me = (Map.Entry) iter.next();			list.add( new IdentityMapEntry( ( (IdentityKey) me.getKey() ).key, me.getValue() ) );		}		return list;	}		/**	 * Workaround for a JDK 1.4.1 bug where <tt>IdentityHashMap</tt>s are not 	 * correctly deserialized.	 * 	 * @param map	 * @return Object	 */	public static Object serialize(Map map) {		return ( (IdentityMap) map ).map;	}		/**	 * Workaround for a JDK 1.4.1 bug where <tt>IdentityHashMap</tt>s are not 	 * correctly deserialized.	 * 	 * @param o	 * @return Map	 */	public static Map deserialize(Object o) {		return new IdentityMap( (Map) o );	}		static final class KeyIterator implements Iterator {				private KeyIterator(Iterator iter) {			identityKeyIterator = iter;		}				private final Iterator identityKeyIterator;		public boolean hasNext() {			return identityKeyIterator.hasNext();		}		public Object next() {			return ( (IdentityKey) identityKeyIterator.next() ).key;		}		public void remove() {			throw new UnsupportedOperationException();		}}}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -