2013-05-29 86 views
0

有人可以解释哈希码是如何工作的吗?我是Android新手。 我想要做的就是获取用户输入的编辑文本 的哈希码。如何使用哈希码?

这是我的代码:

public class MainActivity extends Activity { 
EditText txtCode, txtID; 
Button enter; 

@Override 
     protected void onCreate(Bundle savedInstanceState) 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 


    txtID = (EditText) findViewById(R.id.txtid); 
    txtCode = (EditText) findViewById(R.id.txtcode); 
    enter = (Button) findViewById(R.id.button1); 


     enter.setOnClickListener(new OnClickListener() 
      { 

     @Override 
     public void onClick(View v) 
     { 
      // TODO Auto-generated method stub 

      String a = txtID.getText().toString(); 
      int b = a.hashCode(); 
      txtCode.setText(b); 
     } 
    }); 
} 
+1

'hashCode()'不是Android特有的。 – Ahmad

+1

什么不适用于你现在的代码?你遇到了什么错误? – Simon

+1

你应该看到'Object'的javadoc:http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html - .equals()/。hashCode()合约是充分解释。 – fge

回答

6

你的代码是正确的。这就是你如何得到在文本框中输入的一些文本的哈希码。

(或者至少,如果有一个问题,它不是在代码中的这方面。)

也许你误解的意义和目的hashcode。该方法(其由所有Java引用类型实现)返回一个int,它表示目标对象的简单的32位散列:

  • 它不是一个密码散列。加密哈希是以另一种方式生成的。在你甚至可以认为它是“强大”之前,散列需要多于32位。
  • 这不是唯一的。哈希是从来没有独一无二。
  • 它甚至不是“可能独一无二”。如果你经常尝试,你很容易看到与字符串散列冲突。实际上,由于散列长度为32位,因此在尝试2^32不同的字符串后,您至少保证已经看到至少一次冲突。数学表示,你很可能比更早得到碰撞

没有错误实际上是在我的代码,但总是有当我点击进入强制关闭我的模拟器。

使用logcat寻找是什么原因造成的是“强制关闭”。有可能是一个条目堆栈跟踪异常,这是直接原因。如果您在计算堆栈跟踪的含义时遇到困难,请将其添加到您的问题中......