面试中问道,hashMap是如何实现的,就是说调用它的时候它是如何工作的?
解决方案 »
- 多维数组
- 关于JAVA工程里面显示图片的问题
- 如何判断String中的一段是否是数字?
- 数据库的问题,望大家指教~!
- 急!谁能告诉我”Unsupported major.minor version 48.0“是什么错,应该如何解决
- 关于封闭类的内类,如何访问另一个类中的实例。
- oci方式访问数据库,url如何写?是否把oci805jdbc.dll放到oracle_home\bin下就可以了?
- java类的问题,很急呀!
- 关于一个键盘按键的一个小问题!
- 一个jaiva线程同步的问题
- Hibernate 执行原生sql的问题!前提是不能用hql
- Java JFrame 关于setDefaultLookAndFeelDecorated鼠标监听
int index = uInt % map.length;把value放到那个 index位置。下次访问时再通过 key的hashCode() & 0x8FFFFF;再 % map.length;就知道value放在第几个位置了。
这样map的要得到一个value只跟key运算成index相关,和元素多少相关不大(不大是从理论上说不管多少元素
反正都是根据key算成index直接去那个位置取的,而不会一个一个查找,但实际是相关的,元素多时产生index聚集的机会就多)如果不同的key得到相同的 index,那么在相同的位置就要保存多个value.
所以hp内部每个元素实际上先放链表实现的Entity.这样一个位置就可以放多个元素。
因为是直接根据对象的hashcode取得对象,不用search的过程,所以效果比较高,但也比较占内存。
?
方法.
HashMap[] map = new HashMap[2];
map[0] = new HashMap();
map[0].put("a", "a");
map[1] = new HashMap();
map[1].put("a", "a");
这是用HapMap的例子,其实说白了就是一对一对的存,这里的一对是一个key值,一个value值,而当你想得到key里值,你可以用get()方法,用上面就是map[0].get("a")就能得"a"
HashMap5.0与6.0的实现方式不同.
6.0是将key=null的元素放在第一个桶位
5.0我记得是将key=null设为一个常量.
[code=Java]
public synchronized V put(K key, V value) {
// Make sure the value is not null
if (value == null) {
throw new NullPointerException();
} // Makes sure the key is not already in the hashtable.
Entry tab[] = table;
int hash = key.hashCode();//可见,对key=null是不支持的
//other code
}
code]