Warning: mkdir(): No space left on device in /var/www/tgoop/post.php on line 37

Warning: file_put_contents(aCache/aDaily/post/java_fillthegaps/--): Failed to open stream: No such file or directory in /var/www/tgoop/post.php on line 50
Java: fill the gaps@java_fillthegaps P.359
JAVA_FILLTHEGAPS Telegram 359
Как написать hashcode лучше, чем IDE

Метод hashcode используется, когда класс работает в качестве ключа в hash-based структурах данных. Следить за тем, как используется класс, не всегда удобно, поэтому есть правило — "Переопределяешь equals — переопредели hashcode".

Метод должен соблюдать контракт:

⭐️ Если объект не меняется, хэшкод остаётся постоянным
⭐️ У одинаковых объектов одинаковый хэшкод
⭐️ Если хэшкод одинаковый, то объекты не обязательно равны

Писать equals и hashcode вручную долго, поэтому часто используется автогенерация в IDE или Lombok аннотация @EqualsAndHashCode. Они создают что-то вроде

public int hashcode() {
return Objects.hash(id, param1, param2);
}

Что не так?

Контракт соблюдается, но суть хэшкода пропадает.

Хэшкод — это быстрая проверка без лишних вычислений. В коде выше результат вычисляется каждый раз на основе множества полей. А по количеству операций Objects.hashcode догоняет equals.

Как считать хэш быстрее:

1️⃣ Использовать одно поле

public int hashcode() {
return id;
}

2️⃣ Сохранять результат в отдельном поле

Подойдёт если у объекта нет id, и основные поля не меняются. Так сделано в классе String:

private int hash;

public int hashCode() {
int h = hash;
if (h==0 && !hashIsZero){
hash = …;
}
return h;
}

Эффект от оптимизации будет заметен, если класс активно участвует в hash-based структурах. В остальных случаях можно оставить автогенерацию.
👍53🔥127



tgoop.com/java_fillthegaps/359
Create:
Last Update:

Как написать hashcode лучше, чем IDE

Метод hashcode используется, когда класс работает в качестве ключа в hash-based структурах данных. Следить за тем, как используется класс, не всегда удобно, поэтому есть правило — "Переопределяешь equals — переопредели hashcode".

Метод должен соблюдать контракт:

⭐️ Если объект не меняется, хэшкод остаётся постоянным
⭐️ У одинаковых объектов одинаковый хэшкод
⭐️ Если хэшкод одинаковый, то объекты не обязательно равны

Писать equals и hashcode вручную долго, поэтому часто используется автогенерация в IDE или Lombok аннотация @EqualsAndHashCode. Они создают что-то вроде

public int hashcode() {
return Objects.hash(id, param1, param2);
}

Что не так?

Контракт соблюдается, но суть хэшкода пропадает.

Хэшкод — это быстрая проверка без лишних вычислений. В коде выше результат вычисляется каждый раз на основе множества полей. А по количеству операций Objects.hashcode догоняет equals.

Как считать хэш быстрее:

1️⃣ Использовать одно поле

public int hashcode() {
return id;
}

2️⃣ Сохранять результат в отдельном поле

Подойдёт если у объекта нет id, и основные поля не меняются. Так сделано в классе String:

private int hash;

public int hashCode() {
int h = hash;
if (h==0 && !hashIsZero){
hash = …;
}
return h;
}

Эффект от оптимизации будет заметен, если класс активно участвует в hash-based структурах. В остальных случаях можно оставить автогенерацию.

BY Java: fill the gaps


Share with your friend now:
tgoop.com/java_fillthegaps/359

View MORE
Open in Telegram


Telegram News

Date: |

To view your bio, click the Menu icon and select “View channel info.” On Tuesday, some local media outlets included Sing Tao Daily cited sources as saying the Hong Kong government was considering restricting access to Telegram. Privacy Commissioner for Personal Data Ada Chung told to the Legislative Council on Monday that government officials, police and lawmakers remain the targets of “doxxing” despite a privacy law amendment last year that criminalised the malicious disclosure of personal information. Telegram users themselves will be able to flag and report potentially false content. There have been several contributions to the group with members posting voice notes of screaming, yelling, groaning, and wailing in different rhythms and pitches. Calling out the “degenerate” community or the crypto obsessives that engage in high-risk trading, Co-founder of NFT renting protocol Rentable World emiliano.eth shared this group on his Twitter. He wrote: “hey degen, are you stressed? Just let it out all out. Voice only tg channel for screaming”. The best encrypted messaging apps
from us


Telegram Java: fill the gaps
FROM American