Map简单介绍
key键唯一,且不可重复。我们主要使用的是HashMap。…
关键字:
Map中的key是根据其hash算法是否唯一和重复的。
简单介绍hash算法:
Hash算法一般也成为散列算法,通过散列算法将任意的值转化成固定的长度输出(相同的key其hash值相同),该输出就是散列值,这是一种压缩映射,也就是,散列值的空间远远小于输入的值空间。其实Hash算法产生的目的很单纯,其发明的目的是提高海量数据的查找速度。
简单的说,hash算法的意义在于提供了一种快速存取数据的方法,它用一种算法建立键值与真实值之间的对应关系,(每一个真实值只能有一个键值,但是一个键值可以对应多个真实值),这样可以快速在数组等里面存取数据。
注意:equals不同的key也有可能其Hash值相同(几率很小)。
hash 表能够加快查找速度。使用hash表首先要申请一个定长的指针数组。通过在建立数据表时通过特定的计算公式(hash散列函数)计算出每个字符串对应的一个数值(就是将不固定长度的字符串转换成一个固定长度的数值或索引值)。而后把此数值作为数组下标,把此字符串在数据表的序号保存在此数组元素中(可以扩展到保存一个对象实例指针)。将来想查找某字符串对应位置时,只需要通过hash散列函数计算出字符串对应的值就可以直接知道此字符串的序号等信息了。
这样查找时间是O(1)了。因为不需要查找了,知道数组下标就能访问数组相应元素了,而元素中保存的就是序号等信息。
Map的几种常用遍历方法
public static void main(String[] args) {
Map<String, Integer> map = new HashMap<String, Integer>();
//Map要求key唯一,不能重复,如果重复后存入的key覆盖前存入的key
map.put("语文", 120);
map.put("语文", 130); //示例,不要这样做
map.put("数学", 140);
map.put("英语", 127);
map.put("化学", 89);
map.put("生物", 92);
//第一种遍历key,然后获取value
for(String key : map.keySet()) {
System.out.println("key:"+key+",velue:"+map.get(key));
}
System.out.println("----------------");
//第二种遍历key,value
for(Entry<String, Integer> entry : map.entrySet()) {
System.out.println("key:"+entry.getKey()+",velue:"+entry.getKey());
}
System.out.println("----------------");
//第三种遍历value,此遍历不能获取到key
for(Integer value : map.values()) {
System.out.println("value:"+value);
}
System.out.println("-----------------");
//第四种遍历通过Map.entrySet使用iterator遍历key和value
Iterator<Map.Entry<String, Integer>> iterator = map.entrySet().iterator();
while(iterator.hasNext()) {
Map.Entry<String, Integer> entry = iterator.next();
System.out.println("key:"+entry.getKey()+",velue:"+entry.getKey());
}
}
-------------待补充.-------------