W .NET GetHashCodemetoda jest używana w wielu miejscach w bibliotekach klas podstawowych .NET. Prawidłowe wdrożenie jest szczególnie ważne, aby szybko znaleźć przedmioty w kolekcji lub określić równość. Czy istnieje standardowy algorytm lub najlepsza praktyka w zakresie implementacji GetHashCodedla moich klas niestandardowych, aby nie obniżać wydajności?
Biorąc pod uwagę następującą klasę public class Foo { public int FooId { get; set; } public string FooName { get; set; } public override bool Equals(object obj) { Foo fooItem = obj as Foo; if (fooItem == null) { return false; } return fooItem.FooId == this.FooId; } public override …
Operator ścisłej równości powie ci, czy dwa typy obiektów są równe. Czy istnieje jednak sposób, aby stwierdzić, czy dwa obiekty są równe, podobnie jak wartość kodu skrótu w Javie? Pytanie o przepełnienie stosu Czy w JavaScript jest jakaś funkcja hashCode? jest podobny do tego pytania, ale wymaga bardziej akademickiej odpowiedzi. …
Odpowiedzi na to pytanie są dziełem społeczności . Edytuj istniejące odpowiedzi, aby poprawić ten post. Obecnie nie akceptuje nowych odpowiedzi ani interakcji. Jakie problemy / pułapki należy wziąć pod uwagę przy nadpisywaniu equalsi hashCode?
Niedawno przeczytałem ten dokument dotyczący prac programistycznych . Dokument jest o definiowaniu hashCode()i equals()skutecznie i poprawnie, jednak nie jestem w stanie zrozumieć, dlaczego musimy zastąpić te dwie metody. Jak mogę podjąć decyzję o wydajnym wdrożeniu tych metod?
Gdy klasa w Javie nie zastępuje hashCode () , wydrukowanie instancji tej klasy daje niezłą liczbę. Javadoc Object mówi o hashCode () : O ile jest to praktycznie możliwe, metoda hashCode zdefiniowana przez klasę Object zwraca różne liczby całkowite dla różnych obiektów. Ale kiedy klasa zastępuje hashCode () , w …
Zgodnie z moim zrozumieniem myślę: Jest całkowicie legalne, aby dwa obiekty miały ten sam kod skrótu. Jeśli dwa obiekty są równe (przy użyciu metody equals ()), mają ten sam kod skrótu. Jeśli dwa obiekty nie są równe, nie mogą mieć tego samego kodu skrótu Mam rację? Teraz, jeśli mam rację, …
Zastanawiałem się tylko, dlaczego w klasach używa się liczb pierwszych hashCode() metodzie ? Na przykład, gdy używam Eclipse do generowania mojej hashCode()metody, zawsze 31używana jest liczba pierwsza : public int hashCode() { final int prime = 31; //... } Bibliografia: Oto dobry podkład na temat Hashcode i artykuł o tym, …
Próbuję wymyślić dobrą funkcję mieszającą dla ciągów. Pomyślałem, że dobrym pomysłem może być podsumowanie wartości Unicode dla pierwszych pięciu znaków w ciągu (zakładając, że ma pięć, w przeciwnym razie zatrzymaj się tam, gdzie się kończy). Czy to byłby dobry pomysł, czy zły? Robię to w Javie, ale nie wyobrażam sobie, …
Zamknięte . To pytanie jest oparte na opiniach . Obecnie nie przyjmuje odpowiedzi. Chcesz poprawić to pytanie? Zaktualizuj pytanie, aby można było na nie odpowiedzieć, podając fakty i cytaty, edytując ten post . Zamknięte 3 lata temu . Popraw to pytanie Ciekawi mnie, co ludzie tutaj myślą o używaniu org.apache.commons.lang.builder …
Zasadniczo próbuję stworzyć obiekt z unikatowych obiektów, zbiór. Wpadłem na genialny pomysł, aby po prostu użyć obiektu JavaScript z obiektami jako nazwami właściwości. Jak na przykład, set[obj] = true; To działa do pewnego momentu. Działa świetnie z ciągami i liczbami, ale w przypadku innych obiektów wszystkie wydają się „mieszać” do …
Jaki jest prawidłowy i dobry sposób wdrożenia __hash__()? Mówię o funkcji, która zwraca kod skrótu, który jest następnie używany do wstawiania obiektów do tabel skrótów, czyli słowników. Ponieważ __hash__()zwraca liczbę całkowitą i służy do „dzielenia” obiektów na tablice mieszające, zakładam, że wartości zwracanej liczby całkowitej powinny być równomiernie rozłożone na …
Używamy plików cookie i innych technologii śledzenia w celu poprawy komfortu przeglądania naszej witryny, aby wyświetlać spersonalizowane treści i ukierunkowane reklamy, analizować ruch w naszej witrynie, i zrozumieć, skąd pochodzą nasi goście.
Kontynuując, wyrażasz zgodę na korzystanie z plików cookie i innych technologii śledzenia oraz potwierdzasz, że masz co najmniej 16 lat lub zgodę rodzica lub opiekuna.