• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>

            大龍的博客

            常用鏈接

            統(tǒng)計

            最新評論

            hashcode重復(fù)的可能性超大(轉(zhuǎn))

            用String的hashcode得到int類型作為主鍵。其實hashcode重復(fù)的可能性超大,下面是java的缺省算法:
             public int hashCode() {
                
            int h = hash;
                
            if (h == 0{
                    
            int off = offset;
                    
            char val[] = value;
                    
            int len = count;

                        
            for (int i = 0; i < len; i++{
                            h 
            = 31*+ val[off++];
                        }

                        hash 
            = h;
                    }

                    
            return h;
                }
            但是什么情況下會重復(fù)?下面是測試代碼




            import java.util.HashMap;

            public class Test {

                
            static HashMap map = new HashMap();

                
            private static char startChar = 'A';

                
            private static char endChar = 'z';

                
            private static int offset = endChar - startChar + 1;

                
            private static int dup = 0;

                
            public static void main(String[] args) {
                    
            int len = 3;
                    
            char[] chars = new char[len];
                    tryBit(chars, len);
                    System.
            out.println((int)Math.pow(offset, len) + ":" + dup);
                }


                
            private static void tryBit(char[] chars, int i) {
                    
            for (char j = startChar; j <= endChar; j++{
                        chars[i 
            - 1= j;
                        
            if (i > 1)
                            tryBit(chars, i 
            - 1);
                        
            else
                            test(chars);
                    }

                }


                
            private static void test(char[] chars) {

                    String str 
            = new String(chars).replaceAll("[^a-zA-Z_]""").toUpperCase();// 195112:0
                    
            //String str = new String(chars).toLowerCase();//195112:6612
                    
            //String str = new String(chars).replaceAll("[^a-zA-Z_]","");//195112:122500
                    
            //String str = new String(chars);//195112:138510
                    int hash = str.hashCode();
                    
            if (map.containsKey(hash)) {
                        String s 
            = (String) map.get(hash);
                        
            if (!s.equals(str)) {
                            dup
            ++;
                            System.
            out.println(s + ":" + str);
                        }

                    }
             else {
                        map.put(hash, str);
                        
            // System.out.println(str);
                    }

                }

            }


            在A-z范圍內(nèi)有特殊字符,從結(jié)果看,僅僅3位長度的字符串:
            不處理: 138510次重復(fù)
            去掉字母意外字符: 122500次重復(fù)
            所有字符轉(zhuǎn)小寫:6612次重復(fù)(少了很多)
            去掉字母意外字符,并且轉(zhuǎn)小寫:沒有重復(fù)!4位字符串也沒見重復(fù)

            不難看出:
            1. 缺省實現(xiàn)為英文字母優(yōu)化
            2. 字母大小寫可能導(dǎo)致重復(fù)

            可能:
            長字符串可能hashcode重復(fù)
            中文字符串和特殊字符可能hashcode重復(fù)


            注:由于是2006年的事,所以上面得出的數(shù)據(jù)有誤。可自己進行測試。hash沖突次數(shù)大大減少。

            posted on 2014-08-31 14:59 大龍 閱讀(933) 評論(0)  編輯 收藏 引用


            只有注冊用戶登錄后才能發(fā)表評論。
            網(wǎng)站導(dǎo)航: 博客園   IT新聞   BlogJava   博問   Chat2DB   管理


            亚洲狠狠婷婷综合久久久久| 久久久久人妻精品一区二区三区| 99久久综合狠狠综合久久| 久久精品一区二区| 久久精品国产99久久丝袜| 久久亚洲2019中文字幕| 久久久久久国产精品美女| 午夜精品久久久久久毛片| 久久美女人爽女人爽| 日韩久久久久中文字幕人妻| 国产毛片欧美毛片久久久| 99久久99这里只有免费费精品| 四虎国产精品免费久久久| 无夜精品久久久久久| 久久精品天天中文字幕人妻| 久久亚洲精品中文字幕三区| 亚洲国产成人久久综合一区77| 亚洲精品国产美女久久久| 9191精品国产免费久久| 亚洲国产精品无码久久久久久曰 | 久久久久免费精品国产| 成人久久综合网| 中文字幕久久亚洲一区| 国内精品久久久久影院日本| 久久精品国产精品亚洲| 久久精品国产亚洲精品2020 | 亚洲AV日韩精品久久久久久| 久久99热狠狠色精品一区| 久久婷婷五月综合97色直播| 嫩草影院久久国产精品| 久久精品国产亚洲AV久| 久久精品国产欧美日韩| 久久99国产综合精品免费| 国产欧美久久久精品影院| 青青青国产成人久久111网站| 久久久亚洲欧洲日产国码是AV| 99久久精品无码一区二区毛片| 中文国产成人精品久久不卡| 日批日出水久久亚洲精品tv| 精品国产99久久久久久麻豆| 久久综合九色综合97_久久久|