String.hashcode()的算法规矩ITeye - AG环亚娱乐集团

String.hashcode()的算法规矩ITeye

2019年03月28日09时58分33秒 | 作者: 晨濡 | 标签: 规矩,调用,持平 | 浏览: 232

在java中每一个目标都会有一个hashcode 例如:object,Map,List,String等,假如两个目标,字符串,map所对应的value调用equals()持平  那个比较两边的hashcode必定持平,反之hashcode持平的不必定两个比较值持平,这便是所谓的hash抵触,详细可看map中的完成, String目标的hashcode生成的规矩是

 

咱们创立一个JunitCase 类名为 TestHashcodeCase来测验

 

public class TestHashcodeCase {
 @Test
 public void testGetOrginHashcode(){
 String test = "Test";
 System.out.println(" 调用原生的 String生成办法" + test.hashCode());
}
输出结果是:2603186

 

     

String类中的hashcode源码
 public int hashCode() {
 int h = hash;
 int len = count;
 if (h  0 len 0) {
 int off = offset;
 char val[] = value;
 for (int i = 0; i len; i++) {
 h = 31*h + val[off++];
 hash = h;
 return h;
 }

 

那源码中的核算规矩,咱们经过几个示例来阐明

 

 

@Test
public void testGetHashcodeByCharArray(){
 String test = "Test";
 System.out.println(" 调用原生的 String生成办法" + testGetHashcodeByCharArray(test));
public int testGetHashcodeByCharArray(String str) {
 int h = 0;
 int len = str.length();
 int hash = 0;
 if (h  0 len 0) {
 int off = 0;
 char[] val = str.toCharArray();
 for (int i = 0; i len; i++) {
 h = 31*h + val[off++];
 hash = h;
 return h;
}

 

    

代码: h = 31*h + val[off++]; 是把val[off++]转换成ASCII来做的核算,怎么转换请参考上一篇介绍

 

    咱们以一种更显着的办法来阐明:

   

@Test
public void getHashcodeByIntArray(){
 String test = "Test";
 System.out.println(" 调用原生的 String生成办法" + getHashcodeByIntArray(test));
 public int getHashcodeByIntArray(String str) {
 int h = 0;
 int len = str.length();
 int hash = 0;
 if (h  0 len 0) {
 int off = 0;
 int val[] = strToAscii(str) ;
 for (int i = 0; i len; i++) {
 h = 31*h + val[off++];
 hash = h;
 return h;
 private int[] strToAscii(String str){
 char[] chars = str.toCharArray();
 int[] ascillCode = new int[chars.length];
 for(int i=0;i chars.length;i++){
 System.out.println(""+chars[i]+" = " + (int)chars[i]);
 ascillCode[i] = (int)chars[i];
 return ascillCode;                          
			
版权声明
本文来源于网络,版权归原作者所有,其内容与观点不代表AG环亚娱乐集团立场。转载文章仅为传播更有价值的信息,如采编人员采编有误或者版权原因,请与我们联系,我们核实后立即修改或删除。

猜您喜欢的文章