मैं बस इस आधार पर ऐसा करने से बचूंगा कि यह तारों का एक समूह निर्बाध रूप से बनाता है - हालांकि टॉसिंग सरल बनाने के बारे में कोसी 2801 का बिंदु भी प्रासंगिक है। (मुझे लगता है यह वास्तव में नहीं होगा क्षेत्रों की प्रकृति के कारण, कई टकराव बनाने, लेकिन ...)
मैं एल्गोरिथ्म "सही पाने के लिए सरल और आसान" मैं पहले से है used in this answer के लिए जाना होगा (इसे लांस देखने के लिए धन्यवाद :) - और जो कि प्रभावी जावा में सूचीबद्ध है, जैसा आपने कहा था। इस मामले में यह समाप्त हो जाएगा:
public int GetHashCode()
{
int hash = 17;
// Suitable nullity checks etc, of course :)
hash = hash * 23 + StreetAddress.GetHashCode();
hash = hash * 23 + RuralRoute.GetHashCode();
hash = hash * 23 + City.GetHashCode();
hash = hash * 23 + Province.GetHashCode();
hash = hash * 23 + Country.GetHashCode();
hash = hash * 23 + PostalCode.GetHashCode();
return hash;
}
यह बिल्कुल शून्य नहीं है।
public static int GetNullSafeHashCode<T>(this T value) where T : class
{
return value == null ? 1 : value.GetHashCode();
}
तो आप उपयोग कर सकते: आप सी # 3 उपयोग कर रहे हैं अगर आप एक एक्सटेंशन विधि पर विचार करना चाहते हो सकता है
public int GetHashCode()
{
int hash = 17;
// Suitable nullity checks etc, of course :)
hash = hash * 23 + StreetAddress.GetNullSafeHashCode();
hash = hash * 23 + RuralRoute.GetNullSafeHashCode();
hash = hash * 23 + City.GetNullSafeHashCode();
hash = hash * 23 + Province.GetNullSafeHashCode();
hash = hash * 23 + Country.GetNullSafeHashCode();
hash = hash * 23 + PostalCode.GetNullSafeHashCode();
return hash;
}
आप इस और भी आसान बनाने के लिए एक पैरामीटर सरणी विधि उपयोगिता बना सकते हैं :
public static int GetHashCode(params object[] values)
{
int hash = 17;
foreach (object value in values)
{
hash = hash * 23 + value.GetNullSafeHashCode();
}
return hash;
}
और से कॉल करने की:
public int GetHashCode()
{
return HashHelpers.GetHashCode(StreetAddress, RuralRoute, City,
Province, Country, PostalCode);
}
अधिकांश प्रकारों में प्राइमेटिव शामिल हैं, ताकि मुक्केबाजी कुछ हद तक अनावश्यक रूप से कर सकें, लेकिन इस मामले में आपके पास केवल संदर्भ होंगे। बेशक, आप अनावश्यक रूप से एक सरणी बनाने में पहुंचते हैं, लेकिन आप जानते हैं कि वे समय से पहले अनुकूलन के बारे में क्या कहते हैं ...
आपके विचार के लिए: भी नहीं http://stackoverflow.com/questions/263400/what-is-the-best-algorithm-for-an-overridden-systemobjectgethashcode – lance