<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    love fish大鵬一曰同風起,扶搖直上九萬里

    常用鏈接

    統計

    積分與排名

    friends

    link

    最新評論

    hashcode重復的可能性超大(轉)

    用String的hashcode得到int類型作為主鍵。其實hashcode重復的可能性超大,下面是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;
        }
    但是什么情況下會重復?下面是測試代碼




    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范圍內有特殊字符,從結果看,僅僅3位長度的字符串:
    不處理: 138510次重復
    去掉字母意外字符: 122500次重復
    所有字符轉小寫:6612次重復(少了很多)
    去掉字母意外字符,并且轉小寫:沒有重復!4位字符串也沒見重復

    不難看出:
    1. 缺省實現為英文字母優化
    2. 字母大小寫可能導致重復

    可能:
    長字符串可能hashcode重復
    中文字符串和特殊字符可能hashcode重復

    posted on 2006-06-25 10:34 liaojiyong 閱讀(1459) 評論(0)  編輯  收藏 所屬分類: Java

    主站蜘蛛池模板: 91禁漫免费进入| 特级毛片在线大全免费播放| 亚洲丁香色婷婷综合欲色啪| 亚洲色欲色欲www在线丝| 国产精品亚洲mnbav网站 | 男女超爽刺激视频免费播放| 最近2019免费中文字幕视频三| 今天免费中文字幕视频| 国产成人无码区免费内射一片色欲| 中文在线观看国语高清免费| 久久久久久久久久免免费精品| aaa毛片视频免费观看| 最近免费mv在线观看动漫| 久久免费国产精品一区二区| 玖玖在线免费视频| 一区二区三区四区免费视频 | 四虎影视在线看免费观看| 免费一级毛suv好看的国产网站 | 亚洲国产成人资源在线软件 | a级成人毛片免费图片| 一区二区视频免费观看| 曰批全过程免费视频观看免费软件| 亚洲第一街区偷拍街拍| 亚洲狠狠婷婷综合久久蜜芽| 亚洲熟妇AV日韩熟妇在线| 亚洲另类春色校园小说| 亚洲男人电影天堂| 亚洲影视一区二区| 亚洲jizzjizz在线播放久| 亚洲91精品麻豆国产系列在线| avtt天堂网手机版亚洲| 国产AV无码专区亚洲精品| 亚洲熟妇无码爱v在线观看| 亚洲精品自在线拍| 色噜噜亚洲男人的天堂| 亚洲乱亚洲乱妇无码| 国产尤物在线视精品在亚洲| 国产精品亚洲а∨天堂2021| rh男男车车的车车免费网站| 三上悠亚电影全集免费| 无码国产精品一区二区免费vr|