以下代码是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;
}
}
解决方案 »
- 新手问个android方面的问题
- java类之间传值的问题
- 在线急等 java swing 中的实时流量监控问题
- 一个很简单的空指针异常的问题
- 【求助】关于java.awt.event.ActionListener 中的抽象方法actionPerformed
- 想了很长时间 想不通,来帮帮忙啊,关于PushbackReader
- 讨论一下关于用JAVA作动画的问题?
- 中国大学生java程序设计联盟筹备工作启动!!!!
- java中父类的private变量通过set,get操作的问题
- 哪里公文管理的源代码?愿高分赠送
- J2SE数据类型方面的问题,值得一看,保证可以学到东西
- 几个J2EE 基础问题。求解!
楼主【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>