1.HashMap
《1》遍历:HashMap无序遍历
for(Map.Entry<String, String>m: map.entrySet()//键值对,允许键为空String
{
System.out.println(m.getKey()+" : "+m.getValue());
}
HashMap 源码:
- transient Entry[] table;
-
- static class Entry<K,V> implements Map.Entry<K,V> {
- final K key;
- V value;
- Entry<K,V> next;
- final int hash;
- ……
- }
添加元素
- public V put(K key, V value) {
-
-
- if (key == null)
- return putForNullKey(value);
-
- int hash = hash(key.hashCode());
-
- int i = indexFor(hash, table.length);
-
- for (Entry<K,V> e = table[i]; e != null; e = e.next) {
- Object k;
-
- if (e.hash == hash && ((k = e.key) == key || key.equals(k))) {
- V oldValue = e.value;
- e.value = value;
- e.recordAccess(this);
- return oldValue;
- }
- }
-
- modCount++;
-
- addEntry(hash, key, value, i);
- return null;
读取元素
- public V get(Object key) {
- if (key == null)
- return getForNullKey();
- int hash = hash(key.hashCode());
- for (Entry<K,V> e = table[indexFor(hash, table.length)];
- e != null;
- e = e.next) {
- Object k;
- if (e.hash == hash && ((k = e.key) == key || key.equals(k)))
- return e.value;
- }
- return null;
- }
String equals
-
- public boolean equals(Object anObject) {
- if (this == anObject) {
- return true;
- }
- if (anObject instanceof String) {
- String anotherString = (String)anObject;
- int n = count;
- if (n == anotherString.count) {
- char v1[] = value;
- char v2[] = anotherString.value;
- int i = offset;
- int j = anotherString.offset;
- while (n-- != 0) {
- if (v1[i++] != v2[j++])
- return false;
- }
- return true;
- }
- }
- return false;
- }
String hashcode
-
- public int hashCode() {
- int h = hash;
- int len = count;
- if (h == 0 && len > 0) {
- int off = offset;
- char val[] = value;
-
- for (int i = 0; i < len; i++) {
- h = 31*h + val[off++];
- }
- hash = h;
- }
- return h;
- }
hash函数
- tatic int hash(int h) {
-
-
-
- h ^= (h >>> 20) ^ (h >>> 12);
- return h ^ (h >>> 7) ^ (h >>> 4);
- }
-
-
- static int indexFor(int h, int length) {
- return h & (length-1);
- }
Java HashMap HashCode
原文:http://www.cnblogs.com/HackHer/p/5079492.html