001 /*
002 * Licensed to the Apache Software Foundation (ASF) under one or more
003 * contributor license agreements. See the NOTICE file distributed with
004 * this work for additional information regarding copyright ownership.
005 * The ASF licenses this file to You under the Apache License, Version 2.0
006 * (the "License"); you may not use this file except in compliance with
007 * the License. You may obtain a copy of the License at
008 *
009 * http://www.apache.org/licenses/LICENSE-2.0
010 *
011 * Unless required by applicable law or agreed to in writing, software
012 * distributed under the License is distributed on an "AS IS" BASIS,
013 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
014 * See the License for the specific language governing permissions and
015 * limitations under the License.
016 */
017 package org.apache.commons.collections.map;
018
019 import java.io.IOException;
020 import java.io.ObjectInputStream;
021 import java.io.ObjectOutputStream;
022 import java.io.Serializable;
023 import java.util.Map;
024
025 /**
026 * A <code>Map</code> implementation that is a general purpose alternative
027 * to <code>HashMap</code>.
028 * <p>
029 * This implementation improves on the JDK1.4 HashMap by adding the
030 * {@link org.apache.commons.collections.MapIterator MapIterator}
031 * functionality and many methods for subclassing.
032 * <p>
033 * <strong>Note that HashedMap is not synchronized and is not thread-safe.</strong>
034 * If you wish to use this map from multiple threads concurrently, you must use
035 * appropriate synchronization. The simplest approach is to wrap this map
036 * using {@link java.util.Collections#synchronizedMap(Map)}. This class may throw
037 * exceptions when accessed by concurrent threads without synchronization.
038 *
039 * @since Commons Collections 3.0
040 * @version $Revision: 646777 $ $Date: 2008-04-10 13:33:15 +0100 (Thu, 10 Apr 2008) $
041 *
042 * @author Stephen Colebourne
043 */
044 public class HashedMap
045 extends AbstractHashedMap implements Serializable, Cloneable {
046
047 /** Serialisation version */
048 private static final long serialVersionUID = -1788199231038721040L;
049
050 /**
051 * Constructs a new empty map with default size and load factor.
052 */
053 public HashedMap() {
054 super(DEFAULT_CAPACITY, DEFAULT_LOAD_FACTOR, DEFAULT_THRESHOLD);
055 }
056
057 /**
058 * Constructs a new, empty map with the specified initial capacity.
059 *
060 * @param initialCapacity the initial capacity
061 * @throws IllegalArgumentException if the initial capacity is less than one
062 */
063 public HashedMap(int initialCapacity) {
064 super(initialCapacity);
065 }
066
067 /**
068 * Constructs a new, empty map with the specified initial capacity and
069 * load factor.
070 *
071 * @param initialCapacity the initial capacity
072 * @param loadFactor the load factor
073 * @throws IllegalArgumentException if the initial capacity is less than one
074 * @throws IllegalArgumentException if the load factor is less than zero
075 */
076 public HashedMap(int initialCapacity, float loadFactor) {
077 super(initialCapacity, loadFactor);
078 }
079
080 /**
081 * Constructor copying elements from another map.
082 *
083 * @param map the map to copy
084 * @throws NullPointerException if the map is null
085 */
086 public HashedMap(Map map) {
087 super(map);
088 }
089
090 //-----------------------------------------------------------------------
091 /**
092 * Clones the map without cloning the keys or values.
093 *
094 * @return a shallow clone
095 */
096 public Object clone() {
097 return super.clone();
098 }
099
100 /**
101 * Write the map out using a custom routine.
102 */
103 private void writeObject(ObjectOutputStream out) throws IOException {
104 out.defaultWriteObject();
105 doWriteObject(out);
106 }
107
108 /**
109 * Read the map in using a custom routine.
110 */
111 private void readObject(ObjectInputStream in) throws IOException, ClassNotFoundException {
112 in.defaultReadObject();
113 doReadObject(in);
114 }
115
116 }