Я мало знаю о хэш-кодах. Я нашел этот код, который печатает столкновения.Java hashcode() strings collision
Не могли бы вы рассказать мне, что такое столкновения и как его уменьшить? Почему мы должны использовать хэш-коды?
public static int getHash(String str, int limit)
{
int hashCode = Math.abs(str.hashCode()%(limit));
return hashCode;
}
/**
* @param args
*/
public static void main(String[] args)
{
int hashLimit = 10000;
int stringsLimit = 10000;
String[] arr = new String[hashLimit];
List<String> test = new ArrayList<String>();
Random r = new Random(2);
for (int i = 0 ; i < stringsLimit ; i++)
{
StringBuffer buf = new StringBuffer("");
for (int j = 0 ; j < 10 ; j++)
{
char c = (char)(35+60*r.nextDouble());
buf.append(c);
}
test.add(buf.toString());
//System.out.println(buf.toString());
}
int collisions = 0;
for (String curStr : test)
{
int hashCode = getHash(curStr,hashLimit);
if (arr[hashCode] != null && !arr[hashCode].equals(curStr))
{
System.out.println("collision of ["+arr[hashCode]+"] ("+arr[hashCode].hashCode()+" = "+hashCode+") with ["+curStr+"] ("+curStr.hashCode()+" = "+hashCode+")");
collisions++;
}
else
{
arr[hashCode] = curStr;
}
}
System.out.println("Collisions: "+collisions);
}
Что касается ваших 3 вопросов, лучший ответ для всех трех вопросов будет посвящен википедии. – ControlAltDel
Взгляните на http://en.wikipedia.org/wiki/Hash_table –