ï»??xml version="1.0" encoding="utf-8" standalone="yes"?>97精品97,国产三级精品视频,中文在线三区http://www.aygfsteel.com/TimmyWang/王胖子的黑板æŠ?/description>zh-cnSat, 21 Jun 2025 11:35:04 GMTSat, 21 Jun 2025 11:35:04 GMT60Hashtableå’ŒHashMap引发的血æ¡?/title><link>http://www.aygfsteel.com/TimmyWang/archive/2011/02/27/345291.html</link><dc:creator>王胖å­?/dc:creator><author>王胖å­?/author><pubDate>Sun, 27 Feb 2011 11:47:00 GMT</pubDate><guid>http://www.aygfsteel.com/TimmyWang/archive/2011/02/27/345291.html</guid><wfw:comment>http://www.aygfsteel.com/TimmyWang/comments/345291.html</wfw:comment><comments>http://www.aygfsteel.com/TimmyWang/archive/2011/02/27/345291.html#Feedback</comments><slash:comments>6</slash:comments><wfw:commentRss>http://www.aygfsteel.com/TimmyWang/comments/commentRss/345291.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/TimmyWang/services/trackbacks/345291.html</trackback:ping><description><![CDATA[<span style="widows: 2; text-transform: none; text-indent: 0px; border-collapse: separate; font: medium Simsun; white-space: normal; orphans: 2; letter-spacing: normal; color: rgb(0,0,0); word-spacing: 0px; -webkit-border-horizontal-spacing: 0px; -webkit-border-vertical-spacing: 0px; -webkit-text-decorations-in-effect: none; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px" class="Apple-style-span"><span style="font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 12px" class="Apple-style-span"> <p style="margin: 0px" class="MsoNormal"><em>人物åQ?/em></p> <p style="text-indent: 21pt; margin: 0px" class="MsoNormal" mce_style="text-indent: 21.0pt;"><em>王小胖:性别åQšç”·ã€‚程序员åQŒå·¥ä½œç»éª?/em><em>1 year</em><em>。爱好:吃肉、电玩、马ž®èŠ±ã€‚ç‰¹æŠ€åQšåƒè‚‰ä¸ç”¨è€ƒè™‘胃的定w‡ã€?/em></p> <p style="text-indent: 21pt; margin: 0px" class="MsoNormal" mce_style="text-indent: 21.0pt;"><em>马小花:性别åQšå¥³ã€‚学生,工作¾léªŒ</em><em>0 year</em><em>。爱好:蛋糕、臭¾ŸŽã€çŽ‹ž®èƒ–。特技åQšèƒ½å¤Ÿé™æœçŽ‹ž®èƒ–……</em></p> <p style="text-indent: 21pt; margin: 0px" class="MsoNormal" mce_style="text-indent: 21.0pt;"><em> </em></p> <p style="text-indent: 21pt; margin: 0px" class="MsoNormal" mce_style="text-indent: 21.0pt;"><em>/**2011</em><em>òq?/em><em>2</em><em>月,电媄《将爱情˜q›è¡Œåˆ°åº•》火得不得了。周末,ž®èƒ–也陪着ž®èбåŽÈœ‹˜q™éƒ¨ç”µåª„。放映中åQŒå°èŠÞp¢«å½Þq‰‡ä¸­çš„靖哥哥和杜拉拉感动的一沓糊涂,而小胖则心里暗自后悔没有ä¹îC¸€è¢‹å¤§çˆ†ç±³èŠ±æ¥æ‰“å‘˜q™æ— èŠçš„æ—‰™—´ã€‚媄片结束,ž®èŠ±å·²ç»æ˜¯éËE涕一把泪一把,ž®èƒ–也只有装模作样地抽动了几下éËE子,一心只想着一会儿是吃麦当劌™¿˜æ˜¯å¿…胜客ã€?/em><em>*/</em></p> <p style="text-indent: 21pt; margin: 0px" class="MsoNormal" mce_style="text-indent: 21.0pt;"><em>回到家中åQŒå°èƒ–å’Œž®èŠ±å„è‡ªçŽ©ç€ç”µè„‘ã€?/em></p> <p style="text-indent: 21pt; margin: 0px" class="MsoNormal" mce_style="text-indent: 21.0pt;"><em>ž®èбåQšèƒ–子,你知é?/em><em>Hashtable</em><em>å’?/em><em>HashMap</em><em>的区别吗åQ?/em></p> <p style="text-indent: 21pt; margin: 0px" class="MsoNormal" mce_style="text-indent: 21.0pt;"><em>ž®èƒ–åQšç•¥çŸ¥ã€?/em></p> <p style="text-indent: 21pt; margin: 0px" class="MsoNormal" mce_style="text-indent: 21.0pt;"><em>ž®èбåQ?#8230;…装什么!åQç»™æˆ‘讲è®ÔŒ¼åQï¼</em></p> <p style="text-indent: 21pt; margin: 0px" class="MsoNormal" mce_style="text-indent: 21.0pt;"><em>ž®èƒ–åQšå¥½çš?#8230;…</em></p> <p style="margin: 0px" class="MsoNormal"><strong>½W¬ä¸€ä¸ªåŒºåˆ«å°±å…ˆæ¥è¯´è¯´¾l§æ‰¿å…³ç³»å§ã€?/strong></p> <p style="margin: 0px" class="MsoNormal"> å¦‚果你在baidu里google一下(技术类文章的搜索还是推荐googleåQ‰ï¼Œä¼šå‘现网上的大致说法ä¸?#8220;ç”׃ºŽJava发展的历史原因。Hashtable是基于陈旧的Dictionary¾cȝš„åQŒHashMap是Java 1.2引进的Map接口的一个实现ã€?#8221;相同。这¿Uè¯´æ³•没有错åQŒä½†æ˜¯èƒ–子觉得不够准¼‹®ï¼Œç‰¹åˆ«æ˜¯å¯¹äºŽæˆ‘们这¿Uå¤§ä¼—菜鸟来è¯ß_¼Œå¦‚果不去æ·Þq©¶çš„话åQŒå¯èƒ½å°±ä¼šé€ æˆä¸€äº›ç†è§£ä¸Šçš„å·®å¼‚ã€‚ç®€å•çš„è®¤äØ“<span style="white-space: pre" mce_style="white-space: pre;">Hashtable</span>没有¾l§æ‰¿Map接口。胖子之前就犯过˜q™æ ·çš„错误(胖子承认自己½W¨ï¼Œæ˜¯çœŸ½W?#8230;…åQ?ã€?/p> <p style="margin: 0px" class="MsoNormal">       <em>ž®èбåQšé‚£ä½ æ€Žä¹ˆçŸ¥é“它们两个各自的ç‘ô承关¾pÕd‘¢åQŸèƒ–子ã€?/em></p> <p style="margin: 0px" class="MsoNormal">我们可以参考一下最新的JDK1.6的源码,看看˜q™ä¸¤ä¸ªç±»çš„定义:</p> <p style="margin: 0px" class="MsoNormal"><br /> </p> <pre style="border-bottom: rgb(204,204,204) 1px solid; border-left: rgb(204,204,204) 1px solid; padding-bottom: 3px; background-color: rgb(250,250,250); margin: 0px 5px 5px 15px; padding-left: 3px; padding-right: 3px; font-family: Verdana, Arial, Helvetica, sans-serif; color: rgb(0,0,0); font-size: 12px; border-top: rgb(204,204,204) 1px solid; border-right: rgb(204,204,204) 1px solid; padding-top: 3px; background-origin: initial; background-clip: initial" class="java" name="code">public class Hashtable<K,V> extends Dictionary<K,V> implements Map<K,V>, Cloneable, java.io.Serializable {…} public class HashMap<K,V> extends AbstractMap<K,V> implements Map<K,V>, Cloneable, Serializable {…}</pre> <p style="margin: 0px"><br /> </p> <p style="margin: 0px"><br /> </p> <p style="margin: 0px" class="MsoNormal">可以看到hashtable也是¾l§æ‰¿äº†Map接口。它们的不同是HashtableåQˆsince JDK1.0åQ‰å°±¾l§æ‰¿äº†Dictionary˜q™ä¸ªæŠ½è±¡¾c»ï¼Œè€ŒHashMapåQˆsince JDK1.2åQ‰ç‘ô承的则是AbstractMap˜q™ä¸ªæŠ½è±¡¾c…R€‚因为在Hashtable中看到ç‘ô承Map后所实现的方法是JDK1.2版本时加上去的,所以胖子猜惛_¯èƒ½æ˜¯åœ¨JDK 1.2开发时Sun工程师出于统一的考虑使得Hashtable也ç‘ô承了Map接口ã€?/p> <p style="margin: 0px" class="MsoNormal">       <em>ž®èбåQšå“¦åQŒåŽŸæ?/em><em>JDK</em><em>源码˜q˜èƒ½çœ‹å‡ºæ¥è¿™ä¸ªã€?/em></p> <p style="margin: 0px" class="MsoNormal"><em>       </em><em>ž®èƒ–åQ?#8230;…后面˜q˜èƒ½çœ‹å‡ºæ›´å¤šä¸œè¥¿çš„ã€?/em></p> <p style="margin: 0px" class="MsoNormal"><em>       </em><em>ž®èбåQšå¥½æœŸå¾…啊ã€?/em></p> <p style="margin: 0px" class="MsoNormal"><br /> </p> <p style="margin: 0px" class="MsoNormal"><strong>½W¬äºŒä¸ªåŒºåˆ«æˆ‘ä»¬ä»ŽåŒæ­¥å’ŒåÆˆå‘æ€§ä¸Šæ¥è¯´è¯´å®ƒä»¬ä¸¤ä¸ªçš„ä¸åŒã€?/strong></p> <p style="margin: 0px" class="MsoNormal"><br /> </p> <p style="margin: 0px" class="MsoNormal">可以通过˜q™ä¸¤ä¸ªç±»å¾—源码来分析åQŒHashtable中的主要æ–ÒŽ³•都做了同步处理,而HashMap则没有。可以说Hashtable在默认情冉|”¯æŒåŒæ­¥ï¼Œè€ŒHashMap在默认情况下是不支持的。我们在多线½E‹åƈ发的环境下,可以直接使用HashtableåQŒä½†æ˜¯è¦ä½¿ç”¨HashMap的话ž®Þp¦è‡ªå·±å¢žåŠ åŒæ­¥å¤„ç†äº†ã€‚å¯¹HashMap的同步处理可以ä‹É用Collections¾cÀLä¾›çš„synchronizedMap静态方法;或者直接ä‹É用JDK5.0之后提供的java.util.concurrent包里的ConcurrentHashMap¾c…R€?/p> <p style="text-indent: 21pt; margin: 0px" class="MsoNormal" mce_style="text-indent: 21.0pt;"><em>ž®èƒ–åQ?/em><em>synchronizedMap</em><em>静态方法和</em><em>ConcurrentHashMap</em><em>¾cÀLˆ‘会以后再¾l™ä½ è¯¦ç»†è®²ä¸€ä¸‹çš„。肥婆ã€?/em></p> <p style="text-indent: 21pt; margin: 0px" class="MsoNormal" mce_style="text-indent: 21.0pt;"><em>ž®èбåQšä½ ä¿è¯å•Šã€‚钥匙忘了你知道后果的ã€?/em></p> <p style="text-indent: 21pt; margin: 0px" class="MsoNormal" mce_style="text-indent: 21.0pt;"><em>ž®èƒ–åQšå¥½çš?#8230;…</em></p> <p style="text-indent: 21pt; margin: 0px" class="MsoNormal" mce_style="text-indent: 21.0pt;"><br /> </p> <p style="text-indent: 21pt; margin: 0px" class="MsoNormal" mce_style="text-indent: 21.0pt;"><strong>½W¬ä¸‰ä¸ªåŒºåˆ«å°±æ˜¯å®ƒä»¬å¯¹äº?/strong><strong>null</strong><strong>值的处理方式了ã€?/strong></p> <p style="text-indent: 21pt; margin: 0px" class="MsoNormal" mce_style="text-indent: 21pt;"><br /> </p> <p style="text-indent: 21pt; margin: 0px" class="MsoNormal" mce_style="text-indent: 21.0pt;">我们依然能够从源代码中得知,Hashtable中,keyå’Œvalue都不允许出现null倹{€?/p> <p style="text-indent: 21pt; margin: 0px" class="MsoNormal" mce_style="text-indent: 21.0pt;"><br /> </p> <pre style="border-bottom: rgb(204,204,204) 1px solid; border-left: rgb(204,204,204) 1px solid; padding-bottom: 3px; background-color: rgb(250,250,250); margin: 0px 5px 5px 15px; padding-left: 3px; padding-right: 3px; font-family: Verdana, Arial, Helvetica, sans-serif; color: rgb(0,0,0); font-size: 12px; border-top: rgb(204,204,204) 1px solid; border-right: rgb(204,204,204) 1px solid; padding-top: 3px; background-origin: initial; background-clip: initial" class="java" name="code">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(); int index = (hash & 0x7FFFFFFF) % tab.length; //… }</pre>    <p style="margin: 0px" class="MsoNormal">在我们ä‹É用上面的æ–ÒŽ³•æ—Óž¼Œå¦‚参数value为nullåQŒå¯ä»¥ä»Žä»£ç <span style="font-size: small" mce_style="font-size: small;">中直接看出程序会抛出NullPointerExceptionåQ›è€Œåœ¨key为nullæ—Óž¼Œåˆ™ä¼šåœ?#8220;int hash = key.hashCode();“˜q™æ®µè®¡ç®—Hash值的˜q‡ç¨‹ä¸­æŠ›å‡ºNullPointerExceptionã€?/span>而在在HashMap中,允许nullä½œäØ“key存在åQŒåƈ且和其他keyçš„ç‰¹æ€§ä¸€æ øP¼Œ˜q™æ ·çš„null值key只能有一个;另外HashMap允许多个value为null。这样大家就要注意了åQ?nbsp;HashMap中就不能用get(key)æ–ÒŽ³•来判断HashMap中是否存在某个keyåQŒå› ä¸ºvalue为null和不存在该keyçš„Entry都会˜q”回nullå€û|¼Œè€Œåº”该用containsKey()æ–ÒŽ³•来判断了ã€?/p> <p style="text-indent: 21pt; margin: 0px" class="MsoNormal" mce_style="text-indent: 21.0pt;"><br /> </p> <pre style="border-bottom: rgb(204,204,204) 1px solid; border-left: rgb(204,204,204) 1px solid; padding-bottom: 3px; background-color: rgb(250,250,250); margin: 0px 5px 5px 15px; padding-left: 3px; padding-right: 3px; font-family: Verdana, Arial, Helvetica, sans-serif; color: rgb(0,0,0); font-size: 12px; border-top: rgb(204,204,204) 1px solid; border-right: rgb(204,204,204) 1px solid; padding-top: 3px; background-origin: initial; background-clip: initial" class="java" name="code">import java.util.HashMap; import java.util.Map; import java.util.Map.Entry; public class TestCase { public static void main(String[] args) { Map<Integer,String> hashMap = new HashMap<Integer,String>(); hashMap.put(0, null); hashMap.put(1, "one"); hashMap.put(2, "two"); hashMap.put(null, "null"); for(Entry<Integer, String> e : hashMap.entrySet()) { System.out.println("Key: " + e.getKey() + " -- Value: " + e.getValue()); } System.out.println(hashMap.get(0)); System.out.println(hashMap.get(4)); System.out.println("Contains key 0 ? :" + hashMap.containsKey(0)); System.out.println("Contains key 4 ? :" + hashMap.containsKey(4)); System.out.println("Contains value null ? :" + hashMap.containsValue(null)); } }</pre>   <p style="margin: 0px"><span style="font-family: 'Courier New'; font-size: small" mce_style="font-family: 'Courier New'; font-size: small;"><span style="font-size: 13px" mce_style="font-size: 13px;"><span style="font-family: Verdana, Arial, Helvetica, sans-serif; font-size: small" mce_style="font-family: Verdana, Arial, Helvetica, sans-serif; font-size: small;"><span style="font-size: 12px" mce_style="font-size: 12px;">¾l“æžœåQ?/span></span></span></span></p> <p style="text-align: left; margin: 0px" class="MsoNormal" align="left" mce_style="text-align: left;"><br /> </p> <pre style="border-bottom: rgb(204,204,204) 1px solid; border-left: rgb(204,204,204) 1px solid; padding-bottom: 3px; background-color: rgb(250,250,250); margin: 0px 5px 5px 15px; padding-left: 3px; padding-right: 3px; font-family: Verdana, Arial, Helvetica, sans-serif; color: rgb(0,0,0); font-size: 12px; border-top: rgb(204,204,204) 1px solid; border-right: rgb(204,204,204) 1px solid; padding-top: 3px; background-origin: initial; background-clip: initial" class="java" name="code">Key: null -- Value: null Key: 0 -- Value: null Key: 1 -- Value: one Key: 2 -- Value: two null null Contains key 0 ? :true Contains key 4 ? :false Contains value null ? :true</pre> <p style="margin: 0px"><br /> </p> <p style="margin: 0px" class="MsoNormal">HashMap对于null值key的处理网上有è¯?#8220;null ç”¨new Object()来代替,其Entry.hashCode=0,而且在取出的时候还会还回nullçš„ã€?#8221;胖子我在è¯Õd–源码的过½E‹ä¸­çœ‹åˆ°äº†null值的hash值确实是0 åQˆå†…部实现的数组中的index也是åQ‰ï¼Œä½†æ˜¯èƒ½åŠ›æœ‰é™æ²¡æœ‰çœ‹åˆ°è½¬äØ“new Object()的过½E‹ã€?/p> <p style="text-align: left; margin: 0px" class="MsoNormal" align="left" mce_style="text-align: left;"><em>ž®èбåQ?原来</em><em>hashMap</em><em>çš?/em><em>containsKey</em><em>˜q˜æœ‰˜q™ä¹ˆä¸ªé™·é˜±ï¼Œä»¥åŽè‚¥å©†è¦å°å¿ƒäº†ã€?/em></p> <p style="text-align: left; margin: 0px" class="MsoNormal" align="left" mce_style="text-align: left;"><strong>½W¬å››ä¸ªä¸åŒå°±æ˜¯å®ƒä»¬ä¸¤ä¸?/strong><strong>Hash</strong><strong>值的获取方式了ã€?/strong></p> <p style="text-align: left; margin: 0px" class="MsoNormal" align="left" mce_style="text-align: left;"><br /> </p> <p style="text-align: left; margin: 0px" class="MsoNormal" align="left" mce_style="text-align: left;">˜q˜æ˜¯é€šè¿‡æºä»£ç æºä»£ç åQŒHashtable是直接ä‹É用key对象的hash倹{€?/p> <p style="text-align: left; margin: 0px" class="MsoNormal" align="left" mce_style="text-align: left;"><br /> </p> <p style="text-align: left; margin: 0px" class="MsoNormal" align="left" mce_style="text-align: left;"><br /> </p> <pre style="border-bottom: rgb(204,204,204) 1px solid; border-left: rgb(204,204,204) 1px solid; padding-bottom: 3px; background-color: rgb(250,250,250); margin: 0px 5px 5px 15px; padding-left: 3px; padding-right: 3px; font-family: Verdana, Arial, Helvetica, sans-serif; color: rgb(0,0,0); font-size: 12px; border-top: rgb(204,204,204) 1px solid; border-right: rgb(204,204,204) 1px solid; padding-top: 3px; background-origin: initial; background-clip: initial" class="java" name="code">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();//hashcode int index = (hash & 0x7FFFFFFF) % tab.length; //… }</pre>   <p style="margin: 0px"><br /> </p> <p style="text-align: left; margin: 0px" class="MsoNormal" align="left" mce_style="text-align: left;">而HashMap则是利用key对象的hash值重新计½Ž—一个新的hash倹{€?/p> <p style="text-align: left; margin: 0px" class="MsoNormal" align="left" mce_style="text-align: left;"><br /> </p> <p style="text-align: left; margin: 0px" class="MsoNormal" align="left" mce_style="text-align: left;"><br /> </p> <pre style="border-bottom: rgb(204,204,204) 1px solid; border-left: rgb(204,204,204) 1px solid; padding-bottom: 3px; background-color: rgb(250,250,250); margin: 0px 5px 5px 15px; padding-left: 3px; padding-right: 3px; font-family: Verdana, Arial, Helvetica, sans-serif; color: rgb(0,0,0); font-size: 12px; border-top: rgb(204,204,204) 1px solid; border-right: rgb(204,204,204) 1px solid; padding-top: 3px; background-origin: initial; background-clip: initial" class="java" name="code">public V put(K key, V value) { if (key == null) return putForNullKey(value); int hash = hash(key.hashCode());//hashcode int i = indexFor(hash, table.length); //… } static int hash(int h) { h ^= (h >>> 20) ^ (h >>> 12); return h ^ (h >>> 7) ^ (h >>> 4); }</pre> <p style="margin: 0px"><br /> </p> <p style="text-align: left; margin: 0px" class="MsoNormal" align="left" mce_style="text-align: left;"><em>ž®èбåQšèƒ–子,都用äº?/em><em>hash</em><em>½Ž—法åQŒä½ ¾l™æˆ‘讲讲</em><em>Hash</em><em>½Ž—法吧ã€?/em></p> <p style="text-align: left; margin: 0px" class="MsoNormal" align="left" mce_style="text-align: left;"><em>ž®èƒ–åQšå—¯……以后的,今天我比较忙åQˆå…¶å®žæ˜¯ä¸ä¼šåQ‰ã€?/em></p> <p style="text-align: left; margin: 0px" class="MsoNormal" align="left" mce_style="text-align: left;"><em>ž®èбåQšä½ æ˜¯ä¸æ˜¯ä¸ä¼šå•ŠåQŸå˜¿å˜¿ï¼ˆåç¬‘åQ‰ã€?/em></p> <p style="text-align: left; margin: 0px" class="MsoNormal" align="left" mce_style="text-align: left;"><em>ž®èƒ–åQšä»€ä¹ˆä¸ä¼?#8230;…谈下一话题……</em></p> <p style="text-align: left; margin: 0px" class="MsoNormal" align="left" mce_style="text-align: left;"><em> </em></p> <p style="text-align: left; margin: 0px" class="MsoNormal" align="left" mce_style="text-align: left;"><strong>½W¬äº”个不同就æ˜?/strong><strong>Hashtable</strong><strong>å’?/strong><strong>HashMap</strong><strong>它们两个内部实现方式的数¾l„的初始大小和扩容的方式ã€?/strong></p> <p style="text-align: left; margin: 0px" class="MsoNormal" align="left" mce_style="text-align: left;"><br /> </p> <p style="margin: 0px" class="MsoNormal">HashMap中内部数¾l„的初始定w‡æ˜?6åQ?加蝲因子ä¸?.75åQŒè€Œä¸”数组定w‡å¢žå®¹åŽä¹Ÿè¦æ˜¯2指数‹Æ¡å¹‚åQ?/p> <p style="margin: 0px" class="MsoNormal"><br /> </p> <p style="margin: 0px" class="MsoNormal"><br /> </p> <pre style="border-bottom: rgb(204,204,204) 1px solid; border-left: rgb(204,204,204) 1px solid; padding-bottom: 3px; background-color: rgb(250,250,250); margin: 0px 5px 5px 15px; padding-left: 3px; padding-right: 3px; font-family: Verdana, Arial, Helvetica, sans-serif; color: rgb(0,0,0); font-size: 12px; border-top: rgb(204,204,204) 1px solid; border-right: rgb(204,204,204) 1px solid; padding-top: 3px; background-origin: initial; background-clip: initial" class="java" name="code">/** * The default initial capacity - MUST be a power of two. */ static final int DEFAULT_INITIAL_CAPACITY = 16; /** * The load factor used when none specified in constructor. */ static final float DEFAULT_LOAD_FACTOR = 0.75f;</pre>   <p style="margin: 0px"><br /> </p> <p style="margin: 0px" class="MsoNormal">HashTable中的内部数组的初始容量是11åQŒåŠ è½½å› å­ä¹Ÿæ˜?.75数组的增å®ÒŽ–¹å¼äØ“åQˆoldCapacity * 2 + 1åQ?</p> <p style="margin: 0px" class="MsoNormal"><br /> </p> <p style="margin: 0px" class="MsoNormal"><br /> </p> <pre style="border-bottom: rgb(204,204,204) 1px solid; border-left: rgb(204,204,204) 1px solid; padding-bottom: 3px; background-color: rgb(250,250,250); margin: 0px 5px 5px 15px; padding-left: 3px; padding-right: 3px; font-family: Verdana, Arial, Helvetica, sans-serif; color: rgb(0,0,0); font-size: 12px; border-top: rgb(204,204,204) 1px solid; border-right: rgb(204,204,204) 1px solid; padding-top: 3px; background-origin: initial; background-clip: initial" class="java" name="code">public Hashtable() { this(11, 0.75f); } protected void rehash() { int oldCapacity = table.length; Entry[] oldMap = table; int newCapacity = oldCapacity * 2 + 1; //… }</pre>   <p style="margin: 0px"><br /> </p> <p style="text-align: left; margin: 0px" class="MsoNormal" align="left" mce_style="text-align: left;"><strong>½W¬å…­ä¸ªä¸åŒæˆ‘们从它们两个遍历方式的内部实çŽîC¸Šæ¥è¯´ã€?/strong></p> <p style="margin: 0px" class="MsoNormal">Hashtable HashMap都ä‹É用了 Iterator。而由于历史原因,Hashtable˜q˜ä‹É用了Enumeration的方å¼?ã€?/p> <p style="text-align: left; margin: 0px" class="MsoNormal" align="left" mce_style="text-align: left;"><em>ž®èбåQ?/em><em>Iterator</em><em>å’?/em><em>Enumeration</em><em>的区别是什么啊åQŸç»™æˆ‘讲讌Ӏ?/em></p> <p style="text-align: left; margin: 0px" class="MsoNormal" align="left" mce_style="text-align: left;"><em>ž®èƒ–åQšæˆ‘ä¸æ˜¯è¯´æˆ‘æ²¡æœ‰æ—‰™—´å˜›ï¼Œä¸‹å›žçš„ã€?/em></p> <p style="text-align: left; margin: 0px" class="MsoNormal" align="left" mce_style="text-align: left;"><em>ž®èбåQšæˆ‘éƒ½è®°ä¸‹æ¥åQŒçœå¾—ä½ ¾l™æˆ‘æ·¯‚¿‡åŽ…R€‚(拿è“v½W”开始记账中åQ?/em></p> <p style="text-align: left; margin: 0px" class="MsoNormal" align="left" mce_style="text-align: left;"><em>ž®èƒ–åQ?#8230;…åQˆç´§å¼ ï¼‰</em></p> <p style="text-align: left; margin: 0px" class="MsoNormal" align="left" mce_style="text-align: left;"><strong>½W¬ä¸ƒä¸ªä¸åŒæ—¶å®ƒä»¬çš„æ‹·è´æž„造函数的不同ã€?/strong></p> <p style="text-align: left; margin: 0px" class="MsoNormal" align="left" mce_style="text-align: left;"><br /> </p> <p style="text-align: left; margin: 0px" class="MsoNormal" align="left" mce_style="text-align: left;">依然是通过查看源码åQŒå¯ä»¥å‘现它们两个对于拷贝函数初始容量的不同倹{€?/p> <p style="text-align: left; margin: 0px" class="MsoNormal" align="left" mce_style="text-align: left;">HashMap的实现是åQ?/p> <p style="text-align: left; margin: 0px" class="MsoNormal" align="left" mce_style="text-align: left;"><br /> </p> <p style="text-align: left; margin: 0px" class="MsoNormal" align="left" mce_style="text-align: left;"><br /> </p> <pre style="border-bottom: rgb(204,204,204) 1px solid; border-left: rgb(204,204,204) 1px solid; padding-bottom: 3px; background-color: rgb(250,250,250); margin: 0px 5px 5px 15px; padding-left: 3px; padding-right: 3px; font-family: Verdana, Arial, Helvetica, sans-serif; color: rgb(0,0,0); font-size: 12px; border-top: rgb(204,204,204) 1px solid; border-right: rgb(204,204,204) 1px solid; padding-top: 3px; background-origin: initial; background-clip: initial" class="java" name="code">public HashMap(Map<? extends K, ? extends V> m) { this(Math.max((int) (m.size() / DEFAULT_LOAD_FACTOR) + 1, DEFAULT_INITIAL_CAPACITY), DEFAULT_LOAD_FACTOR); putAllForCreate(m); }</pre>   <p style="margin: 0px"><br /> </p> <p style="text-align: left; margin: 0px" class="MsoNormal" align="left" mce_style="text-align: left;">而Hashtable的实现是åQ?/p> <p style="text-align: left; margin: 0px" class="MsoNormal" align="left" mce_style="text-align: left;"><br /> </p> <p style="text-align: left; margin: 0px" class="MsoNormal" align="left" mce_style="text-align: left;"><br /> </p> <pre style="border-bottom: rgb(204,204,204) 1px solid; border-left: rgb(204,204,204) 1px solid; padding-bottom: 3px; background-color: rgb(250,250,250); margin: 0px 5px 5px 15px; padding-left: 3px; padding-right: 3px; font-family: Verdana, Arial, Helvetica, sans-serif; color: rgb(0,0,0); font-size: 12px; border-top: rgb(204,204,204) 1px solid; border-right: rgb(204,204,204) 1px solid; padding-top: 3px; background-origin: initial; background-clip: initial" class="java" name="code">public Hashtable(Map<? extends K, ? extends V> t) { this(Math.max(2*t.size(), 11), 0.75f); putAll(t); }</pre>   <p style="margin: 0px"><br /> </p> <p style="text-align: left; margin: 0px" class="MsoNormal" align="left" mce_style="text-align: left;"><br /> </p> <p style="text-align: left; margin: 0px" class="MsoNormal" align="left" mce_style="text-align: left;"><em>ž®èƒ–åQšä»Šå¤©è®²çš„å·²¾lå¾ˆå¤šäº†ã€‚我有点饿了åQŒè‚¥å©†ã€?/em></p> <p style="text-align: left; margin: 0px" class="MsoNormal" align="left" mce_style="text-align: left;"><em>ž®èбåQšçœ‹ä½ ä»Šå¤©çš„表现˜q™ä¹ˆå¥½ã€‚èµ°åQŒå¸¦ä½ åŽ»åƒçƒ¤è‚‰åŽ»ã€?/em></p> <p style="text-align: left; margin: 0px" class="MsoNormal" align="left" mce_style="text-align: left;"><em>ž®èƒ–åQšå“ˆå“ˆï¼Œè‚¥å©†ä¸‡å²ã€?/em></p> <p style="text-align: left; margin: 0px" class="MsoNormal" align="left" mce_style="text-align: left;"><br /> </p> <p style="text-align: left; margin: 0px" class="MsoNormal" align="left" mce_style="text-align: left;">PS:下面打算写的一些东è¥?/p> <p style="text-align: left; margin: 0px" class="MsoNormal" align="left" mce_style="text-align: left;"><br /> </p> <p style="margin: 0px" class="MsoNormal"><br /> </p> <ol> <li>TreeMap的排序及其他相关集合¾c?/li> <li>synchronizedMapçš„ä‹É用方å¼?/li> <li>concurrentMap实现¾l†èŠ‚å’Œä‹Éç”?/li> <li>Properties使用说明å’?nbsp;扩展</li> <li>Iteratorå’ŒEnumeration的区åˆ?/li> <li>Hash½Ž—法 的实çŽ?nbsp;</li> </ol> </span></span> <img src ="http://www.aygfsteel.com/TimmyWang/aggbug/345291.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/TimmyWang/" target="_blank">王胖å­?/a> 2011-02-27 19:47 <a href="http://www.aygfsteel.com/TimmyWang/archive/2011/02/27/345291.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss> <footer> <div class="friendship-link"> <a href="http://www.aygfsteel.com/" title="狠狠久久亚洲欧美专区_中文字幕亚洲综合久久202_国产精品亚洲第五区在线_日本免费网站视频">狠狠久久亚洲欧美专区_中文字幕亚洲综合久久202_国产精品亚洲第五区在线_日本免费网站视频</a> </div> </footer> Ö÷Õ¾Ö©Öë³ØÄ£°å£º <a href="http://" target="_blank">ºÏÑôÏØ</a>| <a href="http://" target="_blank">ÎÚÊ²ÏØ</a>| <a href="http://" target="_blank">¹ãË®ÊÐ</a>| <a href="http://" target="_blank">ÓÀÊ¤ÏØ</a>| <a href="http://" target="_blank">ÎäÒØÏØ</a>| <a href="http://" target="_blank">Ë«ÅÆÏØ</a>| <a href="http://" target="_blank">ÆÎÌïÊÐ</a>| <a href="http://" target="_blank">¾äÈÝÊÐ</a>| <a href="http://" target="_blank">ÒËÀ¼ÏØ</a>| <a href="http://" target="_blank">Äþ³ÇÏØ</a>| <a href="http://" target="_blank">Ôæ×¯ÊÐ</a>| <a href="http://" target="_blank">³£É½ÏØ</a>| <a href="http://" target="_blank">±öÑôÏØ</a>| <a href="http://" target="_blank">ÁúÃÅÏØ</a>| <a href="http://" target="_blank">ÏÌ·áÏØ</a>| <a href="http://" target="_blank">Íû³ÇÏØ</a>| <a href="http://" target="_blank">ÇàÑôÏØ</a>| <a href="http://" target="_blank">°¢Â³¿Æ¶ûÇ߯ì</a>| <a href="http://" target="_blank">ÉäÑôÏØ</a>| <a href="http://" target="_blank">³ö¹ú</a>| <a href="http://" target="_blank">ÓñÊ÷ÏØ</a>| <a href="http://" target="_blank">ãòÖÝÊÐ</a>| <a href="http://" target="_blank">å¡ÏªÏØ</a>| <a href="http://" target="_blank">¿Æ¼¼</a>| <a href="http://" target="_blank">Çì³ÇÏØ</a>| <a href="http://" target="_blank">Äþ¶¼ÏØ</a>| <a href="http://" target="_blank">¼½ÖÝÊÐ</a>| <a href="http://" target="_blank">Ðû¶÷ÏØ</a>| <a href="http://" target="_blank">¶þÊÖ·¿</a>| <a href="http://" target="_blank">ÄÚ»ÆÏØ</a>| <a href="http://" target="_blank">ÌÒÔ°ÊÐ</a>| <a href="http://" target="_blank">¾²°²Çø</a>| <a href="http://" target="_blank">»ñ¼ÎÏØ</a>| <a href="http://" target="_blank">ÃÉ×ÔÏØ</a>| <a href="http://" target="_blank">ÎåÔ­ÏØ</a>| <a href="http://" target="_blank">·ÚÎ÷ÏØ</a>| <a href="http://" target="_blank">¹Ì°²ÏØ</a>| <a href="http://" target="_blank">¶¨ÖÝÊÐ</a>| <a href="http://" target="_blank">Ñúå¨</a>| <a href="http://" target="_blank">Æ½Ë³ÏØ</a>| <a href="http://" target="_blank">¾®ÚêÏØ</a>| <script> (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })(); </script> </body>