精华帖 (0) :: 良好帖 (2) :: 新手帖 (3) :: 隐藏帖 (9)
|
|
---|---|
作者 | 正文 |
发表时间:2011-02-14
谢谢大家捧场,个人学习的一个记录,欢迎参加讨论,有空多去看看源代码吧。
|
|
返回顶楼 | |
发表时间:2011-02-14
看贴留名,这是规则
|
|
返回顶楼 | |
发表时间:2011-02-14
emsn 写道 谢谢大家捧场,个人学习的一个记录,欢迎参加讨论,有空多去看看源代码吧。
我今天在公司看到一个同事在看Java.util。然后发现这个贴,公司在杭州 |
|
返回顶楼 | |
发表时间:2011-02-14
虽然youjianbo_han_87兄贴出了源码,但还请emsn兄把这个系列的第一课做一个总结吧。
|
|
返回顶楼 | |
发表时间:2011-02-14
yangleilt 写道 源码在哪里看呀!!我有jdk文档,但是看到的都是相当于uml图的那种解释!没有源码呀??
莫非你没有用IDE(Eclipse或者NetBeans)? 用IDE了,直接Ctrl+鼠标按住这个类,就会自动跳到JDK API源码了 |
|
返回顶楼 | |
发表时间:2011-02-14
最后修改:2011-02-14
IDE用的是JRE就没源码, JDK就有源码.
Java Collection包是大奖作品, 经典代码啊~~ |
|
返回顶楼 | |
发表时间:2011-02-14
最后修改:2011-02-14
emsn 写道
youjianbo_han_87 写道
1. 先鄙视下论坛规则,我好久没上了,竟然要回答什么尿尿问题。
2. 贴出 JDK1.5_update_22中 HashMap的 get方法的源码: /** * Returns the value to which the specified key is mapped in this identity * hash map, or <tt>null</tt> if the map contains no mapping for this key. * A return value of <tt>null</tt> does not <i>necessarily</i> indicate * that the map contains no mapping for the key; it is also possible that * the map explicitly maps the key to <tt>null</tt>. The * <tt>containsKey</tt> method may be used to distinguish these two cases. * * @param key the key whose associated value is to be returned. * @return the value to which this map maps the specified key, or * <tt>null</tt> if the map contains no mapping for this key. * @see #put(Object, Object) */ public V get(Object key) { if (key == null) return getForNullKey(); int hash = hash(key.hashCode()); for (Entry<K,V> e = table[indexFor(hash, table.length)]; e != null; e = e.next) { Object k; if (e.hash == hash && ((k = e.key) == key || key.equals(k))) return e.value;//--关键在这里。 } return null; } 通过代码可以得知,如果一个Key对应2个Value,看到注释的部分吗? 他按顺序找到后,直接就 Return a.value了。而不会循环Person2. 源代码一贴,神秘感就没了,哈哈
|
|
返回顶楼 | |
发表时间:2011-02-14
最后修改:2011-02-14
呵呵再补充下,摘录自我的wiki:
对于所有对象都通用的方法
覆盖equals时请遵守通用约定
覆盖equals时总要覆盖hashCode
|
|
返回顶楼 | |
发表时间:2011-02-15
skzr.org 写道
emsn 写道
youjianbo_han_87 写道
1. 先鄙视下论坛规则,我好久没上了,竟然要回答什么尿尿问题。
2. 贴出 JDK1.5_update_22中 HashMap的 get方法的源码: /** * Returns the value to which the specified key is mapped in this identity * hash map, or <tt>null</tt> if the map contains no mapping for this key. * A return value of <tt>null</tt> does not <i>necessarily</i> indicate * that the map contains no mapping for the key; it is also possible that * the map explicitly maps the key to <tt>null</tt>. The * <tt>containsKey</tt> method may be used to distinguish these two cases. * * @param key the key whose associated value is to be returned. * @return the value to which this map maps the specified key, or * <tt>null</tt> if the map contains no mapping for this key. * @see #put(Object, Object) */ public V get(Object key) { if (key == null) return getForNullKey(); int hash = hash(key.hashCode()); for (Entry<K,V> e = table[indexFor(hash, table.length)]; e != null; e = e.next) { Object k; if (e.hash == hash && ((k = e.key) == key || key.equals(k))) return e.value;//--关键在这里。 } return null; } 通过代码可以得知,如果一个Key对应2个Value,看到注释的部分吗? 他按顺序找到后,直接就 Return a.value了。而不会循环Person2. 源代码一贴,神秘感就没了,哈哈
我不知道哥们你看懂了没,我根本就忽略了他Put的过程,我只是用源码说明,如果Map中一个Key对应了2个Value,如例子中的Person1和Person2为何只能取到前者,至于Put,你看看源码不就知道了。。。。。 |
|
返回顶楼 | |
发表时间:2011-02-15
emsn 写道 yangleilt 写道 源码在哪里看呀!!我有jdk文档,但是看到的都是相当于uml图的那种解释!没有源码呀??
这位同学,下下来的jdk里有源代码的压缩包,名字叫src.zip,可以解压看也可以用eclipse attach进去看,推荐后者。注意,不是jdk文档,你的文档可能是jdk用javadoc 生成的文档。 以前还没发现呀!谢谢了! |
|
返回顶楼 | |