以下代码是jdk自带的hashmap类的put方法
我想把他改写成C语言,试试运行速度会不会提高。
因为没有才接触java,不明白以下红色区域
public Object put(Object key, Object value) {
Object k = maskNull(key);
int hash = hash(k);
int i = indexFor(hash, table.length);
for (Entry e = table[i]; e != null; e = e.next) {
if (e.hash == hash && eq(k, e.key)) {
Object oldValue = e.value;
e.value = value;
e.recordAccess(this);
return oldValue;
}
}
modCount++;
addEntry(hash, k, value, i);
return null;
}
这个e类是什么类?哪里定义的,是不是类似于一个C语言里面的结构体?
另外table的定义又在哪里?是不是就是一个类似存放整数的数组?
entry是什么意思?是不是个抽象的数据类型,小范围使用的时候可以删掉它
找了半天没找到,类似于
for (e = table[i]; e != null; e = e->next) {
if (e.hash == hash && eq(k, e.key)) {
oldValue = e.value;
e.value = value;
e.recordAccess(this);
return oldValue;
}
}
我想把他改写成C语言,试试运行速度会不会提高。
因为没有才接触java,不明白以下红色区域
public Object put(Object key, Object value) {
Object k = maskNull(key);
int hash = hash(k);
int i = indexFor(hash, table.length);
for (Entry e = table[i]; e != null; e = e.next) {
if (e.hash == hash && eq(k, e.key)) {
Object oldValue = e.value;
e.value = value;
e.recordAccess(this);
return oldValue;
}
}
modCount++;
addEntry(hash, k, value, i);
return null;
}
这个e类是什么类?哪里定义的,是不是类似于一个C语言里面的结构体?
另外table的定义又在哪里?是不是就是一个类似存放整数的数组?
entry是什么意思?是不是个抽象的数据类型,小范围使用的时候可以删掉它
找了半天没找到,类似于
for (e = table[i]; e != null; e = e->next) {
if (e.hash == hash && eq(k, e.key)) {
oldValue = e.value;
e.value = value;
e.recordAccess(this);
return oldValue;
}
}
楼主【SHOUYU2】截止到2008-07-28 18:08:53的历史汇总数据(不包括此帖):
发帖的总数量:27 发帖的总分数:530 每贴平均分数:19
回帖的总数量:26 得分贴总数量:0 回帖的得分率:0%
结贴的总数量:15 结贴的总分数:300
无满意结贴数:0 无满意结贴分:0
未结的帖子数:12 未结的总分数:230
结贴的百分比:55.56 % 结分的百分比:56.60 %
无满意结贴率:0.00 % 无满意结分率:0.00 %
楼主加油
红色字体的意思是说:由于Key是一个对象, 得先计算出hashcode, 即一个整型值.
然后以此hashcode为下标, 要询hash值相同, 且key也完全一致的对象,
如果存在, 则更新对应的值, 即e.value=value
如果不存在, 则增加一个key, 即addEntry方法如还不明白, 可参考哈希算法
这个内部类的实现在 HashMap.java 文件中可以找到,类的签名为:static class Entry<K,V> implements Map.Entry<K,V>