public static void main(String[] args) { FlexibleHashMap<String,Integer> map = new FlexibleHashMap<String,Integer>(); map.put("hi", 1); map.put("mom", 2); map.put("foo", 3); map.put("ach", 4); map.put("cbba", 5); map.put("d", 6); map.put("edf", 7); map.put("mom", 8); map.put("hi", 9); System.out.println(map); System.out.println(map.toTableString()); } }
protected void expand() { LinkedList<Entry<K, V>>[] old = buckets; currentPrime += 4; int newCapacity = buckets.length * 2; LinkedList<Entry<K, V>>[] newTable = createEntryListArray(newCapacity); buckets = newTable; threshold = (int)(newCapacity * LOAD_FACTOR); // System.out.println("new size="+newCapacity+", thres="+threshold); // rehash all existing entries int oldSize = size(); for (LinkedList<Entry<K, V>> bucket : old) { if ( bucket==null ) continue; for (Entry<K, V> e : bucket) { if ( e==null ) break; put(e.key, e.value); } } n = oldSize; }
@Override public V put(K key, V value) { if ( key==null ) return null; if ( n > threshold ) expand(); int b = getBucket(key); LinkedList<Entry<K, V>> bucket = buckets[b]; if ( bucket==null ) { bucket = buckets[b] = new LinkedList<Entry<K, V>>(); } for (Entry<K, V> e : bucket) { if ( comparator.equals(e.key, key) ) { V prev = e.value; e.value = value; n++; return prev; } } // not there bucket.add(new Entry<K, V>(key, value)); n++; return null; }
@Override public Collection<V> values() { List<V> a = new ArrayList<V>(size()); for (LinkedList<Entry<K, V>> bucket : buckets) { if ( bucket==null ) continue; for (Entry<K, V> e : bucket) { a.add(e.value); } } return a; }
@Override public void clear() { buckets = createEntryListArray(INITAL_CAPACITY); n = 0; }
@Override public boolean containsKey(Object key) { return get(key)!=null; }
@Override public V get(Object key) { @SuppressWarnings("unchecked") K typedKey = (K)key; if ( key==null ) return null; int b = getBucket(typedKey); LinkedList<Entry<K, V>> bucket = buckets[b]; if ( bucket==null ) return null; // no bucket for (Entry<K, V> e : bucket) { if ( comparator.equals(e.key, typedKey) ) { return e.value; } } return null; }
@Override public String toString() { if ( size()==0 ) return "{}"; StringBuilder buf = new StringBuilder(); buf.append('{'); boolean first = true; for (LinkedList<Entry<K, V>> bucket : buckets) { if ( bucket==null ) continue; for (Entry<K, V> e : bucket) { if ( e==null ) break; if ( first ) first=false; else buf.append(", "); buf.append(e.toString()); } } buf.append('}'); return buf.toString(); }
public FlexibleHashMap(AbstractEqualityComparator<? super K> comparator, int initialCapacity, int initialBucketCapacity) { if (comparator == null) { comparator = ObjectEqualityComparator.INSTANCE; } this.comparator = comparator; this.buckets = createEntryListArray(initialBucketCapacity); this.initialBucketCapacity = initialBucketCapacity; }
@Override public boolean containsKey(Object key) { return get(key)!=null; }
@Override public V get(Object key) { @SuppressWarnings("unchecked") K typedKey = (K)key; if ( key==null ) return null; int b = getBucket(typedKey); LinkedList<Entry<K, V>> bucket = buckets[b]; if ( bucket==null ) return null; // no bucket for (Entry<K, V> e : bucket) { if ( comparator.equals(e.key, typedKey) ) { return e.value; } } return null; }
public static void main(String[] args) { FlexibleHashMap<String,Integer> map = new FlexibleHashMap<String,Integer>(); map.put("hi", 1); map.put("mom", 2); map.put("foo", 3); map.put("ach", 4); map.put("cbba", 5); map.put("d", 6); map.put("edf", 7); map.put("mom", 8); map.put("hi", 9); System.out.println(map); System.out.println(map.toTableString()); } }
protected void expand() { LinkedList<Entry<K, V>>[] old = buckets; currentPrime += 4; int newCapacity = buckets.length * 2; LinkedList<Entry<K, V>>[] newTable = createEntryListArray(newCapacity); buckets = newTable; threshold = (int)(newCapacity * LOAD_FACTOR); // System.out.println("new size="+newCapacity+", thres="+threshold); // rehash all existing entries int oldSize = size(); for (LinkedList<Entry<K, V>> bucket : old) { if ( bucket==null ) continue; for (Entry<K, V> e : bucket) { if ( e==null ) break; put(e.key, e.value); } } n = oldSize; }
@Override public V put(K key, V value) { if ( key==null ) return null; if ( n > threshold ) expand(); int b = getBucket(key); LinkedList<Entry<K, V>> bucket = buckets[b]; if ( bucket==null ) { bucket = buckets[b] = new LinkedList<Entry<K, V>>(); } for (Entry<K, V> e : bucket) { if ( comparator.equals(e.key, key) ) { V prev = e.value; e.value = value; n++; return prev; } } // not there bucket.add(new Entry<K, V>(key, value)); n++; return null; }
@Override public int hashCode() { int hash = MurmurHash.initialize(); for (LinkedList<Entry<K, V>> bucket : buckets) { if ( bucket==null ) continue; for (Entry<K, V> e : bucket) { if ( e==null ) break; hash = MurmurHash.update(hash, comparator.hashCode(e.key)); } } hash = MurmurHash.finish(hash, size()); return hash; }
@Override public void clear() { buckets = createEntryListArray(INITAL_CAPACITY); n = 0; }
@Override public boolean containsKey(Object key) { return get(key)!=null; }
@Override public V get(Object key) { @SuppressWarnings("unchecked") K typedKey = (K)key; if ( key==null ) return null; int b = getBucket(typedKey); LinkedList<Entry<K, V>> bucket = buckets[b]; if ( bucket==null ) return null; // no bucket for (Entry<K, V> e : bucket) { if ( comparator.equals(e.key, typedKey) ) { return e.value; } } return null; }
public static void main(String[] args) { FlexibleHashMap<String,Integer> map = new FlexibleHashMap<String,Integer>(); map.put("hi", 1); map.put("mom", 2); map.put("foo", 3); map.put("ach", 4); map.put("cbba", 5); map.put("d", 6); map.put("edf", 7); map.put("mom", 8); map.put("hi", 9); System.out.println(map); System.out.println(map.toTableString()); } }
protected void expand() { LinkedList<Entry<K, V>>[] old = buckets; currentPrime += 4; int newCapacity = buckets.length * 2; LinkedList<Entry<K, V>>[] newTable = createEntryListArray(newCapacity); buckets = newTable; threshold = (int)(newCapacity * LOAD_FACTOR); // System.out.println("new size="+newCapacity+", thres="+threshold); // rehash all existing entries int oldSize = size(); for (LinkedList<Entry<K, V>> bucket : old) { if ( bucket==null ) continue; for (Entry<K, V> e : bucket) { if ( e==null ) break; put(e.key, e.value); } } n = oldSize; }