精华内容
下载资源
问答
  • Java字符串hashCode() 方法

    千次阅读 2019-11-04 08:45:30
    hashCode() 方法用于返回字符串的哈希码。 字符串对象的哈希码根据以下公式计算: s[0]*31^(n-1) + s[1]*31^(n-2) + ... + s[n-1] 使用 int 算法,这里 s[i] 是字符串的第 i 个字符,n 是字符串的长度,^ 表示求...

    Java hashCode() 方法

    hashCode() 方法用于返回字符串的哈希码。

    • 字符串对象的哈希码根据以下公式计算:
    s[0]*31^(n-1) + s[1]*31^(n-2) + ... + s[n-1]
    

    使用 int 算法,这里 s[i] 是字符串的第 i 个字符,n 是字符串的长度,^ 表示求幂。空字符串的哈希值为 0。
    语法

    public int hashCode()
    

    参数

    无。

    返回值

    • 返回对象的哈希码值。
    public class Test {
        public static void main(String args[]) {
            String Str = new String("sunny chen");
            System.out.println("字符串的哈希码为 :" + Str.hashCode() );
        }
    }
    
    展开全文
  • js实现java字符串hashCode方法

    千次阅读 2019-09-24 22:55:32
    在计算字符串hashcode时,可能会溢出。这种溢出属于正常情况。在js中,所有数字都是以64位浮点数形式储存。其表示范围要远远超过java32位的int。所以在js要实现java字符串hashCode方法,就需要主动让其值产生...

    java的int类型占4个字节。在计算字符串的hashcode时,可能会溢出。这种溢出属于正常情况。
    在js中,所有数字都是以64位浮点数形式储存。其表示范围要远远超过java32位的int。某些运算只有整数才能完成,此时 js 会自动把64位浮点数,转成32位整数,然后再进行运算。

    有什么用呢?

    • 更深入理解java字符串的hashCode方法
    • 理解数值计算的溢出处理
    • 连接js和java字符串处理

    java字符串的hashCode方法

    public int hashCode() {
            int h = this.hash;
            if (h == 0 && this.value.length > 0) {
                this.hash = h = this.isLatin1() ? StringLatin1.hashCode(this.value) : StringUTF16.hashCode(this.value);
            }
    
            return h;
        }
    

    js实现字符串的hashCode方法

    <html>
    	<head>
    <meta charset="utf-8"> 
    	</head>
    	<body>
    		<script>
    String.prototype.hashCode = function(){
    	//如果已经缓存了结果,直接返回
        if(this.hashcode!==undefined){
            return this.hashcode
        }
        let hashcode = 0
        for(let i=0;i<this.length;i++){
        	//溢出需要每次运算后立即处理,否则可能超过js数值的表示范围。
            hashcode = hashcode*31+this.charCodeAt(i)
            hashcode &= 0xffffffff
        }
        this.hashcode = hashcode
        return hashcode
    }
    console.info('a'.hashCode())
    console.info('aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa'.hashCode())//-1535507039
    console.info('aaaaaa'.hashCode())//-1425372064
    console.info('aaaaa'.hashCode())
    		</script>
    	</body>
    </html>
    
    展开全文
  • 不同字符串HashCode可能相同

    千次阅读 2019-05-13 18:46:00
    不同的字符串hashcode可能相同。 先看例子: @Test public void test6(){ System.out.println("ABCDEa123abc".hashCode()); // 165374702 System.out.println("ABCDFB123abc".hashCode()); // 1653747.....

    不同的字符串,hashcode可能相同。

    先看例子:

    @Test
        public void test6(){
            System.out.println("ABCDEa123abc".hashCode());  // 165374702
            System.out.println("ABCDFB123abc".hashCode()); //  165374702
        }

    源码:String.class

        public int hashCode() {
            int h = hash;
            if (h == 0 && value.length > 0) {
                char val[] = value;
    
                for (int i = 0; i < value.length; i++) {
                    //上次一算出的hash值乘以31 然后再加上当前字符编码值
                    h = 31 * h + val[i];
                }
                hash = h;
            }
            return h;
        }

    分析:int 在java中4个字节,[-2^31,2^31-1]  (注意,数学表示方法,实际java用Math.pow(2,31))

    int肯定会有一个上限,当字符长时产生的数值过大int放不下时会进行截取,一旦截取HashCode的正确性就无法保证了,所以这点可以推断出HashCode存在不相同字符拥有相同HashCode。

     

    那为什么HashMap可以照常获取val呢?

      @Test
        public void test6(){
            System.out.println("ABCDEa123abc".hashCode());  // 165374702
            System.out.println("ABCDFB123abc".hashCode()); //  165374702
    
            Map<String,String> map = new HashMap<String,String>();
            map.put("ABCDEa123abc","123");
            map.put("ABCDFB123abc","321");
    
            System.out.println(map.get("ABCDEa123abc"));
            System.out.println(map.get("ABCDFB123abc"));
    
        }

    结果:

    165374702
    165374702
    123
    321

     

    看下获取的源码:

    (1)获取Node[] 数组对应的Node元素,  first = tab[(n - 1) & hash]

    (2)如果不是Entry第一个元素,就指向Next。也就是说当hash相同时,只是说明所在的数组位置一样,后续还是需要key比较;

     

    转载于:https://www.cnblogs.com/xiaozhuanfeng/p/10858344.html

    展开全文
  • string-hash获取字符串的哈希值使用非加密哈希函数FNV-1a。 与Java的String#hashCode()类似。 安装$ npm install @ sindresorhus / string-hash用法const stringHash string-hash获取字符串的哈希值使用非加密...
  • 字符串hashcode

    2010-06-29 16:16:09
    function hashConvert(v,ext) local ch = 0 local val = 0 if(v) then for i=1,#v do ch = v:byte(i) if( ch >= 65 and ch ) then ...使用string 2 hashcode 在有些场合很方便, 比如页面图片缓存等。

    function hashConvert(v,ext)
    local ch = 0
    local val = 0

    if(v) then
    for i=1,#v do
    ch = v:byte(i)
    if( ch >= 65 and ch <= 90 ) then
    ch = ch + 32
    end
    val = val*0.7 + ch --0.7是加权
    end
    end
    val = val .. ''
    val = val:gsub("+","")
    val = val:gsub("%.","")


    if(ext)then
    return string.format('%s.%s',val,ext)
    else
    return string.format('%s',val)
    end
    end

    --test

    print(hashConvert('http://192.168.1.131:8080/sns/head.jsp?id=3&width=40&height=40&type=jpeg','gif'))
    print(hashConvert('http://192.168.1.131:8080/sns/head.jsp?id=5&width=40&height=40&type=jpeg','gif'))

    --output
    33444727508723.gif
    33444733948534.gif


    使用string 2 hashcode 在有些场合很方便, 比如页面图片缓存等。
    展开全文
  • /** * * 生存hashCode * */function hashCode($str){ if(empty($str)) return ''; $str = strtoupper($str); $mdv = md5($str); $mdv1 = substr($mdv,0,16); $mdv2 = substr($mdv,16,16); $...
  • Java计算一个字符串HashCode

    千次阅读 2018-03-08 23:52:50
    计算hashcode的原理步详解: import java.math.BigInteger; import java.security.MessageDigest; import java.security.NoSuchAlgorithmException; public class MD5 { public static void main(String[] ...
  • hashcode字符串

    2013-10-29 10:17:00
    问题1....hashcode是用来判断两个字符串是否相等的依据,不同的字符串不可能有相同的hashcode,但不同的hashCode经过与长度的取余,就很可能产生相同的hashCode,就是所谓的哈希冲突. 如:   p...
  • mysql通过字符串计算hashcode更新到原表和多表关联优化 一. 需求描述 现有表a,要求通过每条数据中的三个字段计算hashcode值更新到原表做为shopid. 二. 第一种做法 最好的方式是通过spark sql计算出来更新,但是...
  • Java 获取字符串Hash值

    千次阅读 2020-03-22 11:21:06
    } catch (NoSuchAlgorithmException e) { cacheKey = String.valueOf(key.hashCode()); } return cacheKey; } private static String bytesToHexString(byte[] bytes) { // ...
  • java中为什么从文件中读取出来的字符串hashcode值不等于直接从文件中复制出来的hashcode值?
  • hashcode值相同的字符串

    千次阅读 2017-02-22 15:12:20
    长度为2的字符串hashcode冲突:   2112:Aa 2112:BB 2113:Ab 2113:BC 2114:Ac 2114:BD 2115:Ad 2115:BE 2116:Ae 2116:BF 2117:Af 2117:BG 2118:Ag 2118:BH 2119:Ah 2119:BI ...
  • equals和hashcode总结

    万次阅读 多人点赞 2019-07-31 18:37:06
    equals和hashcode总结: 1.equals方法没有重写的话,用于判断对象的内存地址引用是否是用一个地址。...2.hashCode是jdk根据对象的地址或者字符串或者数字算出来的int类型的数值,当然你也可以重写它,hashcode...
  • 字符串hash函数(hashCode的生成)

    千次阅读 2013-11-12 16:48:51
    今天根据自己的理解重新整理了一下几个字符串hash函数,使用了模板,使其支持宽字符串,代码如下: [cpp]   view plain copy /// @brief BKDR Hash Function   ///...
  • 如何输入一个字符串,得到一个唯一的hashcode? 例子如下: package main import ( &quot;fmt&quot; &quot;hash/crc32&quot; ) // String hashes a string to a unique ...
  • java字符串字符串数组Java String array is used to hold fixed number of Strings. String array is very common in simple java programs, specially among beginners to java and to test some specific ...
  • String类利用了final修饰的char类型数组存储字符,它的内容是不变的,我们平时的赋值只是从内存中重新开辟了一块空间。String的线程是安全的! StringBuffer对方法加了同步锁或者对调用的方法加了同步锁,所以是...
  • scala 字符串函数Scala String can be defined as a sequence of characters. Today we will look into String concatenation, substring and some other Scala string functions. Scala字符串可以定义为字符序列。 ...
  • /** * 获取Hash值 */ public static String ... //Java利用MessageDigest获取字符串MD5 final MessageDigest mDigestData = MessageDigest.getInstance("MD5"); mDigestData.update(key.getBytes(.
  • c、d的比较结果全部一致,这是java的一种优化 ,它会先把"hello"这个字符串放在字符缓冲区中,如果有出现一个String x = "hello",就直接把缓冲区中的地址赋给x,就会出现c与d指向的内存地址相同的。
  • hashCode

    2019-05-31 17:48:32
    hashCode是jdk根据对象的地址或者字符串或者数字算出来的int类型的数值 详细了解请 参考 public inthashCode()返回该对象的哈希码值。支持此方法是为了提高哈希表(例如 java.util.Hashtable 提供的哈希表)的性能。...
  • HashCode

    千次阅读 2020-12-16 18:00:32
    HashCode 1.最底层的实现方法为:在Object .java中 public native int hashCode(); 2.在HashMap.java中的hashcode方法: public final int hashCode() { return Objects.hashCode(key) ^ Objects.hashCode(value); ...
  • 最近遇到一个需求:一个按钮和一个输入框,在输入框中输入字符串,通过点击按钮,将输入框中的文字在十六进制字符串和原意字符串之间切换。 这时需要字节数组:因为不论是十六进制字符串还是原意字符串,他们的字节...
  • 字符串格式化

    千次阅读 2017-12-15 11:05:35
    String类的静态format()方法用于创建格式化的字符串。format()方法有两种重载形式。 (1)format(String format,Object…args) 该方法使用指定的格式字符串和参数返回一个格式化字符串,格式化后的新字符串使用...
  • s1== str1为false,是因为通过new产生的对象在堆中,str1是堆中变量的引用,而s1是指向字符串字面值"小新"的引用,地址不同所以不相等。 str1 == str2为flase,是因为即使内容相同,由于不是指向同一个对象,也会...
  • Java内存管理-探索Java中字符串String(十二)

    千次阅读 多人点赞 2019-05-04 23:18:39
    文章目录一、初识String类二、字符串的不可变性三、字符串常量池和 intern 方法四、面试题1、 String s1 = new String("hello");这句话创建了几个字符串对象?2、有时候在面试的时候会遇到这样的问题:**都说String...
  • JAVA字符串常用api

    万次阅读 多人点赞 2017-02-14 17:51:53
    转载自字符串常用方法 和Java string字符串常用方法 字符串基本操作 1.substring(from,end)(含头不含尾) 截取一串字符串的一串子字符串,从from位置的字母(包括from)到end(不包括end位置)的字符串。 可以通过...
  • 使用JNI获取Android apk签名hashcode

    千次阅读 2017-07-10 17:58:24
    hashcode = sign.hashCode();   Log.i( "test" , "hashCode : " + hashcode);   return hashcode == - 82892576 ? 1 : 0 ;   } catch (Exception e) { ...
  • 4.字符串用标点符号进行分割 两种方法: 法一:用spilt进行分割 Scanner readIn = new Scanner(System.in); System.out.println("输入组句,用中文逗号隔开"); String sentence = readIn.nextLine(); String[]...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 47,591
精华内容 19,036
关键字:

获取字符串的hashcode