Map<String,String> map3 = new HashMap<String,String>();
map3.put("柳志崇", "01");
map3.put("柳山왡", "02");
System.out.println(map3.get("柳志崇"));
map3.put("柳志崇", "01");
map3.put("柳山왡", "02");
System.out.println(map3.get("柳志崇"));
System.out.println(map3.get("柳山왡"));
hashmap实现原理:
map存储时可以使null值,null键;
当为null键的时候,数据排在第一位;
线程不安全,不是同步的;
无序的;
key值相同的时候,hashcode一定相同,但是hashcode相同的时候,key不一定相同
hashmap是基于哈希表实现的
哈希表是由数组加链表形式实现的:数组的特点是插入、删除困难,寻址容易,链表的特点是插入删除容易,寻址困难;
int hash = key.hashCode();
hashcode值是通过取模来得到的,所以会出现key值不同,hashcode值相同的问题,相同的key值,hashcode一定相同,map是通过put(K,V)来存储数据的,根据key值生成hashcode值,存放到数组的对应位置,如果差生hashcode相同的情况,就会产生冲突,当产生冲突的时候,map是这样处理的,判断key值是否相同,如果相同,直覆盖对应位置的value值,当通过get(key)取数据的时候,取出的是最后一次放入的数据;
前面说过因为hashcode是通过取模运算,会出现不同的key产生相同的hashcode值,存入数据的时候会产生冲突,看源码是先判断key值是否相同,先根据hashcode查询对应数组的位置是否存在值,如果不存在直接插入数据,如果存在数据,并且key值还不相同,数据将会存储在一个链表中,保存到下一个节点,当用get(KEY)取数据的时候,通过key.equals(key),取出对应的数据;