HashMap<String,Double> map = new HashMap<String,Double>(2); ? ?
??map.put("语文",80.0);????
???map.put("数学",89.0);????
??map.put("英语",78.2);
hashmap底层使用数据实现的?? transient Entry[] table;
这里的table就是用来储数据的。
?static class Entry<K,V> implements Map.Entry<K,V> {
??????? final K key;
??????? V value;
??????? Entry<K,V> next;
??????? final int hash;}
Entry包括4个变量。
原理。1.根据key得到hashcode? 方法:int hash = hash(key.hashCode());
2.根据hashcode得到对应的位置 方法:int i = indexFor(hash,table.length);
这一步很关进。可以将一个key转换成一个固定的位置。这就是为什么快的原因。
当需要get(o)的时候。只要根据上面1和2两步 就可以得到该key对应的value所在的位置(table数组中的位置)。可以快速取出value
?
总结 : hashmap快的原因:可以通过hash算法。将一个固定的key转换为它唯一对应的位置。三、插入重复Key值问题
http://blog.sina.com.cn/s/blog_4abbd3410101fhe7.html
今天在用到了HashMap来遍历所有非重复的Key时遇到了一个问题,在写入数据库的时候报错--主键不能重复插入。查看了好久java文档才得以解决。
?
class MyType {
?
?
?
?
?
?
?
}
?
如果代码中用到类似HashMap hm = new HashMap();
那么定义两个变量?
?
?
?
猜下HashMap中有几个元素?
?
答案是有两个,原因是mta和mtb放在了不同的内存地址里面,mta和mtb传进去的是引用,那么怎么样实现HashMap没有值相同的Key呢?
方法很简单:只需要重写两个函数 public boolean equals(Object obj); 和 public int hashCode()
如下:
class MyType {
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?