浅析String与hashCode
String 类的 hash 冲突比较严重, 我们在系统开发和设计中, 要避开这个潜在的性能坑。
1. 示例代码
先来看一段示例代码:
import org.junit.Assert;
import org.junit.Test;
// 演示String类的hash冲突
public class StringHashCodeTest {
@Test
public void testMain() {
main(null);
}
public static void main(String[] args) {
testHash("Aa", "BB"); // 2112
// 2031744
testHash("AaAa", "AaBB");
testHash("BBAa", "AaBB");
}
private static void testHash(String s1, String s2) {
Assert.assertNotNull(s1);
Assert.assertNotNull(s2);
int hash1 = s1.hashCode();
int hash2 = s2.hashCode();
System.out.println("s1=" + s1 + "; " + "s1.hash=" + hash1 + ";" + " s2=" + s1 + "; " + "s2.hash=" + hash2);
Assert.asser