2013-05-29 87 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尋找是什麼原因造成的是「強制關閉」。有可能是一個條目堆棧跟蹤異常,這是直接原因。如果您在計算堆棧跟蹤的含義時遇到困難,請將其添加到您的問題中......