标签:new soft hash microsoft enter ati als object 修改
java集合中Map接口的实现类有HashMap、Hashtable、LinkedHashMap和TreeMap,与List不同的是Map并不是继承自Collection接口。可以这样来理解它:
1 static class Node<K,V> implements Map.Entry<K,V> { 2 final int hash; 3 final K key; 4 V value; 5 Node<K,V> next; 6 7 Node(int hash, K key, V value, Node<K,V> next) { 8 this.hash = hash; 9 this.key = key; 10 this.value = value; 11 this.next = next; 12 } 13 14 public final K getKey() { return key; } 15 public final V getValue() { return value; } 16 public final String toString() { return key + "=" + value; } 17 18 public final int hashCode() { 19 return Objects.hashCode(key) ^ Objects.hashCode(value); 20 } 21 22 public final V setValue(V newValue) { 23 V oldValue = value; 24 value = newValue; 25 return oldValue; 26 } 27 28 public final boolean equals(Object o) { 29 if (o == this) 30 return true; 31 if (o instanceof Map.Entry) { 32 Map.Entry<?,?> e = (Map.Entry<?,?>)o; 33 if (Objects.equals(key, e.getKey()) && 34 Objects.equals(value, e.getValue())) 35 return true; 36 } 37 return false; 38 } 39 }
HashMap 的实例有两个参数影响其性能:初始容量(默认16) 和加载因子(默认0.75)。容量是哈希表中桶的数量,初始容量只是哈希表在创建时的容量。加载因子是描述哈希表在扩容之前可以达到多满的一种度量。当哈希表中的条目数超出了加载因子与当前容量的乘积时,则要对该哈希表进行rehash 操作(即重建内部数据结构),从而哈希表将具有大约两倍的桶数。因此,HashMap的容量并不等于能够存储的对象的个数。
因此,在创建实例的时候我们要按照自己的需求来设置这两个值,当空间大而对查询效率要求高的时候可以将初始容量设置的大一些,而加载因子小一些这样的话查询效率高,但空间利用率不高,而当空间比较小而效率要求不是很高的时候可以将初始容量设置小一些而加载因子设置大一些,这样查询速度会慢一些而空间利用率会高一些。
图片来自:http://blog.csdn.net/qh_java/article/details/46404439 图片来自:http://blog.csdn.net/qh_java/article/details/46404439
下面通过源码来进行分析,了解HashMap的一些基本用法:
1.HashMap(int initialCapacity, float loadFactor) 第一个参数为初始容量,第二个参数为加载因子
2.HashMap(int initialCapacity) 只初始化容量,加载因子为默认值0.75
3. HashMap() 空的构造器,加载因子为默认值0.75
4.HashMap(Map<? extends K, ? extends V> m) 初始化HashMap中的元素,加载因子默认0.75
1.put(K key, V value) 插入单个map元素
2. putAll(Map<? extends K, ? extends V> m) 插入一个map集合
1 //hashMap默认按key的哈希值存储,所以是一种无序存储 2 hashMap.put("A", 100); 3 hashMap.put("B", 120); 4 hashMap.put("C", 105); 5 for(String key: hashMap.keySet()){ 6 System.out.print(key+":"+hashMap.get(key)+", "); 7 }//A:100, B:120, C:105,
1.get(Object key) 按key值查找相应的value值
2.containsKey(Object key) 查找map中是否含有指定的key
3.containsValue(Object value) 查找map中是否含有指定的value
1 System.out.println(hashMap.get("A"));//100 2 System.out.println(hashMap.containsKey("A"));//true 3 System.out.println(hashMap.containsValue(100));//true
1.put(K key, V value) 找到key值相同的value,用新的value值进行覆盖
1 hashMap.put("A", 500); 2 System.out.println(hashMap.get("A"));//500
1.remove(Object key) 按key查找,将相应的key-value对删除
2.clear() 清空map中的所有元素
1 System.out.println(hashMap.size());//4 2 hashMap.remove("D"); 3 System.out.println(hashMap.containsKey("D"));//false 4 System.out.println(hashMap.size());//3
标签:new soft hash microsoft enter ati als object 修改
原文地址:http://www.cnblogs.com/Wilange/p/7636923.html