abstractmap.java
来自「java源代码 请看看啊 提点宝贵的意见」· Java 代码 · 共 668 行 · 第 1/2 页
JAVA
668 行
/* * @(#)AbstractMap.java 1.34 03/01/23 * * Copyright 2003 Sun Microsystems, Inc. All rights reserved. * SUN PROPRIETARY/CONFIDENTIAL. Use is subject to license terms. */package java.util;import java.util.Map.Entry;/** * This class provides a skeletal implementation of the <tt>Map</tt> * interface, to minimize the effort required to implement this interface. <p> * * To implement an unmodifiable map, the programmer needs only to extend this * class and provide an implementation for the <tt>entrySet</tt> method, which * returns a set-view of the map's mappings. Typically, the returned set * will, in turn, be implemented atop <tt>AbstractSet</tt>. This set should * not support the <tt>add</tt> or <tt>remove</tt> methods, and its iterator * should not support the <tt>remove</tt> method.<p> * * To implement a modifiable map, the programmer must additionally override * this class's <tt>put</tt> method (which otherwise throws an * <tt>UnsupportedOperationException</tt>), and the iterator returned by * <tt>entrySet().iterator()</tt> must additionally implement its * <tt>remove</tt> method.<p> * * The programmer should generally provide a void (no argument) and map * constructor, as per the recommendation in the <tt>Map</tt> interface * specification.<p> * * The documentation for each non-abstract methods in this class describes its * implementation in detail. Each of these methods may be overridden if the * map being implemented admits a more efficient implementation.<p> * * This class is a member of the * <a href="{@docRoot}/../guide/collections/index.html"> * Java Collections Framework</a>. * * @author Josh Bloch * @version 1.34, 01/23/03 * @see Map * @see Collection * @since 1.2 */public abstract class AbstractMap implements Map { /** * Sole constructor. (For invocation by subclass constructors, typically * implicit.) */ protected AbstractMap() { } // Query Operations /** * Returns the number of key-value mappings in this map. If the map * contains more than <tt>Integer.MAX_VALUE</tt> elements, returns * <tt>Integer.MAX_VALUE</tt>.<p> * * This implementation returns <tt>entrySet().size()</tt>. * * @return the number of key-value mappings in this map. */ public int size() { return entrySet().size(); } /** * Returns <tt>true</tt> if this map contains no key-value mappings. <p> * * This implementation returns <tt>size() == 0</tt>. * * @return <tt>true</tt> if this map contains no key-value mappings. */ public boolean isEmpty() { return size() == 0; } /** * Returns <tt>true</tt> if this map maps one or more keys to this value. * More formally, returns <tt>true</tt> if and only if this map contains * at least one mapping to a value <tt>v</tt> such that <tt>(value==null ? * v==null : value.equals(v))</tt>. This operation will probably require * time linear in the map size for most implementations of map.<p> * * This implementation iterates over entrySet() searching for an entry * with the specified value. If such an entry is found, <tt>true</tt> is * returned. If the iteration terminates without finding such an entry, * <tt>false</tt> is returned. Note that this implementation requires * linear time in the size of the map. * * @param value value whose presence in this map is to be tested. * * @return <tt>true</tt> if this map maps one or more keys to this value. */ public boolean containsValue(Object value) { Iterator i = entrySet().iterator(); if (value==null) { while (i.hasNext()) { Entry e = (Entry) i.next(); if (e.getValue()==null) return true; } } else { while (i.hasNext()) { Entry e = (Entry) i.next(); if (value.equals(e.getValue())) return true; } } return false; } /** * Returns <tt>true</tt> if this map contains a mapping for the specified * key. <p> * * This implementation iterates over <tt>entrySet()</tt> searching for an * entry with the specified key. If such an entry is found, <tt>true</tt> * is returned. If the iteration terminates without finding such an * entry, <tt>false</tt> is returned. Note that this implementation * requires linear time in the size of the map; many implementations will * override this method. * * @param key key whose presence in this map is to be tested. * @return <tt>true</tt> if this map contains a mapping for the specified * key. * * @throws NullPointerException key is <tt>null</tt> and this map does not * not permit <tt>null</tt> keys. */ public boolean containsKey(Object key) { Iterator i = entrySet().iterator(); if (key==null) { while (i.hasNext()) { Entry e = (Entry) i.next(); if (e.getKey()==null) return true; } } else { while (i.hasNext()) { Entry e = (Entry) i.next(); if (key.equals(e.getKey())) return true; } } return false; } /** * Returns the value to which this map maps the specified key. Returns * <tt>null</tt> if the map contains no mapping for this key. A return * value of <tt>null</tt> does not <i>necessarily</i> indicate that the * map contains no mapping for the key; it's also possible that the map * explicitly maps the key to <tt>null</tt>. The containsKey operation * may be used to distinguish these two cases. <p> * * This implementation iterates over <tt>entrySet()</tt> searching for an * entry with the specified key. If such an entry is found, the entry's * value is returned. If the iteration terminates without finding such an * entry, <tt>null</tt> is returned. Note that this implementation * requires linear time in the size of the map; many implementations will * override this method. * * @param key key whose associated value is to be returned. * @return the value to which this map maps the specified key. * * @throws NullPointerException if the key is <tt>null</tt> and this map * does not not permit <tt>null</tt> keys. * * @see #containsKey(Object) */ public Object get(Object key) { Iterator i = entrySet().iterator(); if (key==null) { while (i.hasNext()) { Entry e = (Entry) i.next(); if (e.getKey()==null) return e.getValue(); } } else { while (i.hasNext()) { Entry e = (Entry) i.next(); if (key.equals(e.getKey())) return e.getValue(); } } return null; } // Modification Operations /** * Associates the specified value with the specified key in this map * (optional operation). If the map previously contained a mapping for * this key, the old value is replaced.<p> * * This implementation always throws an * <tt>UnsupportedOperationException</tt>. * * @param key key with which the specified value is to be associated. * @param value value to be associated with the specified key. * * @return previous value associated with specified key, or <tt>null</tt> * if there was no mapping for key. (A <tt>null</tt> return can * also indicate that the map previously associated <tt>null</tt> * with the specified key, if the implementation supports * <tt>null</tt> values.) * * @throws UnsupportedOperationException if the <tt>put</tt> operation is * not supported by this map. * * @throws ClassCastException if the class of the specified key or value * prevents it from being stored in this map. * * @throws IllegalArgumentException if some aspect of this key or value * * prevents it from being stored in this map. * * @throws NullPointerException this map does not permit <tt>null</tt> * keys or values, and the specified key or value is * <tt>null</tt>. */ public Object put(Object key, Object value) { throw new UnsupportedOperationException(); } /** * Removes the mapping for this key from this map if present (optional * operation). <p> * * This implementation iterates over <tt>entrySet()</tt> searching for an * entry with the specified key. If such an entry is found, its value is * obtained with its <tt>getValue</tt> operation, the entry is is removed * from the Collection (and the backing map) with the iterator's * <tt>remove</tt> operation, and the saved value is returned. If the * iteration terminates without finding such an entry, <tt>null</tt> is * returned. Note that this implementation requires linear time in the * size of the map; many implementations will override this method.<p> * * Note that this implementation throws an * <tt>UnsupportedOperationException</tt> if the <tt>entrySet</tt> iterator * does not support the <tt>remove</tt> method and this map contains a * mapping for the specified key. * * @param key key whose mapping is to be removed from the map. * @return previous value associated with specified key, or <tt>null</tt> * if there was no entry for key. (A <tt>null</tt> return can * also indicate that the map previously associated <tt>null</tt> * with the specified key, if the implementation supports * <tt>null</tt> values.) * @throws UnsupportedOperationException if the <tt>remove</tt> operation * is not supported by this map. */ public Object remove(Object key) { Iterator i = entrySet().iterator(); Entry correctEntry = null; if (key==null) { while (correctEntry==null && i.hasNext()) { Entry e = (Entry) i.next(); if (e.getKey()==null) correctEntry = e; } } else { while (correctEntry==null && i.hasNext()) { Entry e = (Entry) i.next(); if (key.equals(e.getKey())) correctEntry = e; } } Object oldValue = null; if (correctEntry !=null) { oldValue = correctEntry.getValue(); i.remove(); } return oldValue; } // Bulk Operations /** * Copies all of the mappings from the specified map to this map * (optional operation). These mappings will replace any mappings that * this map had for any of the keys currently in the specified map.<p> * * This implementation iterates over the specified map's * <tt>entrySet()</tt> collection, and calls this map's <tt>put</tt> * operation once for each entry returned by the iteration.<p> * * Note that this implementation throws an * <tt>UnsupportedOperationException</tt> if this map does not support * the <tt>put</tt> operation and the specified map is nonempty. * * @param t mappings to be stored in this map. * * @throws UnsupportedOperationException if the <tt>putAll</tt> operation * is not supported by this map. * * @throws ClassCastException if the class of a key or value in the * specified map prevents it from being stored in this map. * * @throws IllegalArgumentException if some aspect of a key or value in * the specified map prevents it from being stored in this map. * @throws NullPointerException the specified map is <tt>null</tt>, or if * this map does not permit <tt>null</tt> keys or values, and the * specified map contains <tt>null</tt> keys or values. */ public void putAll(Map t) { Iterator i = t.entrySet().iterator(); while (i.hasNext()) { Entry e = (Entry) i.next(); put(e.getKey(), e.getValue()); } } /** * Removes all mappings from this map (optional operation). <p> * * This implementation calls <tt>entrySet().clear()</tt>. * * Note that this implementation throws an * <tt>UnsupportedOperationException</tt> if the <tt>entrySet</tt> * does not support the <tt>clear</tt> operation. * * @throws UnsupportedOperationException clear is not supported * by this map. */ public void clear() { entrySet().clear(); }
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?