Stok nesneleri, anahtarın String
(örn. Apple, Inc. için "AAPL"
) simge numarası olduğu bir HashMap
numaralı belgede saklıyorum. Ne yazık ki, bu Ally Financial Inc (GM1) ve Küresel Ortaklar LP (GLP) karma kodları çarpışan ve birbirlerinin üzerine yazacak gibi geçerli değildir. Örneğin: "GM1".hashCode() == "GLP".hashCode()
== büyük sorunlar.Stok senedi sembolleri için daha iyi hashCode işlevi?
Herhangi bir çarpışma garanti edemeyen hisse senedi dizeleri için hashCode
var mı?
public Class StockTicker {
public String symbol;
public StockTicker(String symbol) { this.symbol = symbol; }
@Override
public int hashCode() {
// What goes here?
}
}
Başarılı cevaplar senedi dize en fazla 5 karakterden gerçeği yararlanabilir ve büyük harf alfa-sayısal hariç olacak "" "BRK.B" içinde olduğu gibi.
, geçersiz kılmak emin de eşittir olun:
İşte o mükemmel karma kodunun yaratan bir uygulama bu. – christopher
Mükemmel bir kod yazmaksızın (eşit olmayan nesneler için çarpışmalar olmadan) hashcode yazmak mümkündür, ancak HashMap'in çarpışmalar altında bile çarpışmaları doğru bir şekilde gerçekleştireceğini biliyorsunuz (çok küçük bir performansda da olsa) Evet? Sadece 'return symbol.hashCode();' kullanmak için yeterince kötü mü? – Mshnik
@Mshnik Bu demek oluyor ki ** değil ** mümkün mü? – Kayaman