hashmap结构与原理解析
Hashmap本质其实一种数据类型。是用哈希表与红黑树实现的map类。在Java编程语言中,最基本的数据结构就是数组和模拟指针(引用)。其他所有的数据结构都可基于其产生。Hasmap从结构上来讲,其实就是将数组与链表结合起来所诞生的一种数据结构类型。
在谈Hashmap之前首先要了解什么是map,map是用于存储键值对(key,value)的集合类,从术语讲就是一组键值对的映射。
在Java中方便理解,可以将map看作是接口。
如上图所示,左边代表键的集合,右边代表值的集合,每一条关系记录就是一个entry即键值对
map中没有重复的key,每个key只能对应一个value。
上图是Hashmap的存储结构,在获取元素前需要把key经过hash运算得到目标元素在表中的位置,在经过比较得到元素,使得查找效率极高。
遍历方法
1.可以采用keySet()+for循环的方法来遍历,keySet()返回的是一个Key值的集合
Map<String,String> map=new HashMap<String,String>();
map.put("key1","value1");
map.put("key2","value2");
map.put("key3","value3");
for(String key:map.keySet()){
system.out.println("key:"+key);
system.out.println("value:"+map.get(key));
}
2.采用EntrySet()+Iterator进行遍历,EntrySet()返回的是一个Map.Entry的一个集合,它提供getKey(),getValue()方法来获取键值对。
Iterator< Map.Entry<String,String>> it=map.EntrySet().iterator();
while(it.hasNext()){
Map.Entry<String,String> entry=it.next();
system.out.println("key:"+entry.getKey());
system.out.println("value:"+entry.getValue());
}
3.直接采用EntrySet+for增强进行遍历
for(Map.Entry<String,String> entry:map.entrySet()){
system.out.println("key:"+entry.getKey());
system.out.println("value:"+entry.getValue());
}
4.取出所有value的值,但是不能取出KEY值
for(String value:map.values()){ <pre name="code" class="html"> system.out.println("value:"+value);
}
HashMap 的 4 个构造方法
//创建一个空的哈希表,初始容量为 16,加载因子为 0.75
public HashMap()
//创建一个空的哈希表,指定容量,使用默认的加载因子
public HashMap(int initialCapacity)
//创建一个空的哈希表,指定容量和加载因子
public HashMap(int initialCapacity, float loadFactor)
//创建一个内容为参数 m 的内容的哈希表public HashMap(Map<? extends K, ? extends V> m)
———————————————