HashOjbect之HashObjectMap(一)
HashOjbect之HashObjectMap(1)
import java.util.AbstractCollection;
import java.util.Collection;
import java.util.ConcurrentModificationException;
import java.util.Iterator;
import java.util.NoSuchElementException;
import java.util.Set;
import org.apache.log4j.Logger;
/**
* 该类是HashMap的一个简化实现类。该类不是线程安全的。
* 主要实现了以Key值来Hash数据和查找数据。
* 如果两个HashObject的Key值相等,则会返回该对象或覆盖该对象。
*
* @param <T>
*/
public class HashObjectMap<T extends BaseHashObject> {
transient BaseHashObject [] table;
transient int size;
static final int DEFAULT_INITIAL_CAPACITY = 16;
static final int MAXIMUM_CAPACITY = 1 << 30;
static final float DEFAULT_LOAD_FACTOR = 0.75f;
int threshold;
final float loadFactor;
transient volatile int modCount;
private static final Logger logger = Logger.getLogger(HashObjectMap.class);
public HashObjectMap(int initialCapacity, float loadFactor)
{
if (initialCapacity < 0)
throw new IllegalArgumentException("Illegal initial capacity: " +
initialCapacity);
if (initialCapacity > MAXIMUM_CAPACITY)
initialCapacity = MAXIMUM_CAPACITY;
if (loadFactor <= 0 || Float.isNaN(loadFactor))
throw new IllegalArgumentException("Illegal load factor: " +
loadFactor);
// Find a power of 2 >= initialCapacity
int capacity = 1;
while (capacity < initialCapacity)
capacity <<= 1;
this.loadFactor = loadFactor;
threshold = (int)(capacity * loadFactor);
table = new BaseHashObject[capacity];
init();
}
import java.util.AbstractCollection;
import java.util.Collection;
import java.util.ConcurrentModificationException;
import java.util.Iterator;
import java.util.NoSuchElementException;
import java.util.Set;
import org.apache.log4j.Logger;
/**
* 该类是HashMap的一个简化实现类。该类不是线程安全的。
* 主要实现了以Key值来Hash数据和查找数据。
* 如果两个HashObject的Key值相等,则会返回该对象或覆盖该对象。
*
* @param <T>
*/
public class HashObjectMap<T extends BaseHashObject> {
transient BaseHashObject [] table;
transient int size;
static final int DEFAULT_INITIAL_CAPACITY = 16;
static final int MAXIMUM_CAPACITY = 1 << 30;
static final float DEFAULT_LOAD_FACTOR = 0.75f;
int threshold;
final float loadFactor;
transient volatile int modCount;
private static final Logger logger = Logger.getLogger(HashObjectMap.class);
public HashObjectMap(int initialCapacity, float loadFactor)
{
if (initialCapacity < 0)
throw new IllegalArgumentException("Illegal initial capacity: " +
initialCapacity);
if (initialCapacity > MAXIMUM_CAPACITY)
initialCapacity = MAXIMUM_CAPACITY;
if (loadFactor <= 0 || Float.isNaN(loadFactor))
throw new IllegalArgumentException("Illegal load factor: " +
loadFactor);
// Find a power of 2 >= initialCapacity
int capacity = 1;
while (capacity < initialCapacity)
capacity <<= 1;
this.loadFactor = loadFactor;
threshold = (int)(capacity * loadFactor);
table = new BaseHashObject[capacity];
init();
}