Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- public class DifferentHashCodeExample {
- public static void main(String[] args) throws NoSuchFieldException, IllegalAccessException {
- //наша мапа
- Map<SomeClass, Object> map = new HashMap();
- for (int i = 0; i < 17; i += 2) {
- SomeClass someClass = new SomeClass();
- someClass.setSomeField(i);
- map.put(someClass, i);
- }
- //получаем и выводим кол-во бакетов в мапе, по умолчанию 16
- Field tableField = HashMap.class.getDeclaredField("table");
- tableField.setAccessible(true);
- Object[] table = (Object[]) tableField.get(map);
- System.out.println("Кол-во бакетов в мапе: " + (table == null ? 0 : table.length));
- //выводим хэшкод и индекс всех ключей в мапе
- map.entrySet().forEach(a -> System.out.println("Hashcode: " + a.getKey().hashCode() +
- " Bucket index: " + SomeClass.indexFor(a.getKey().hashCode(), table.length)));
- }
- }
- class SomeClass {
- private int someField;
- //Алгоритм вычисления индекса бакета в хэштаблице
- static int indexFor(int h, int length) {
- return h & (length - 1);
- }
- public void setSomeField(int someField) {
- this.someField = someField;
- }
- @Override
- public boolean equals(Object o) {
- if (this == o) return true;
- if (!(o instanceof SomeClass)) return false;
- SomeClass someClass = (SomeClass) o;
- return someField == someClass.someField;
- }
- @Override
- public int hashCode() {
- return Objects.hash(someField);
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement