Object, Equals и HashCode 1 Flashcards

1
Q

класс Object

A

Все классы являются наследниками суперкласса Object.
Объект Object может ссылаться на объект любого другого класса.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
2
Q

методы класса Object

A
  1. Class getClass() — возвращает в рантайме класс данного объекта.
  2. int hashCode() — возвращает хеш-код
  3. boolean equals(Object obj) — сравнивает объекты.
  4. Object clone() - клонирование объекта
  5. String toString() — возвращает строковое представление объекта.
  6. void notify() — просыпается один поток, который ждет на “мониторе” данного объекта.
  7. void notifyAll() — просыпаются все потоки, которые ждут на “мониторе” данного объекта.
  8. void wait(long timeout) - поток переходит в режим ожидания в течение указанного времени.
  9. void wait() - приводит данный поток в ожидание, пока другой поток не вызовет notify() или notifyAll() методы для этого объекта.
  10. void wait(long timeout, int nanos) - приводит данный поток в ожидание, пока другой поток не вызовет notify() или notifyAll() для этого метода, или пока не истечет указанный промежуток времени.
  11. void finalize() - вызывается сборщиком мусора, когда garbage collector определил, что ссылок на объект больше нет.
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
3
Q

метод equals()

A

это метод класса Object, который используется для сравнения объектов на предмет логического равенства

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
4
Q

метод hashCode()

A

Это метод класса Object, который возвращает целочисленное значение (хэш-код) объекта.
Хэш-код используется в таких структурах данных, как HashMap, HashSet и HashTable для более быстрого поиска объектов.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
5
Q

Как работает метод equals() по умолчанию?

A

По умолчанию метод equals() в классе Object сравнивает ссылки (адреса в памяти) объектов. Если объекты указывают на один и тот же адрес в памяти, возвращается true, иначе — false.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
6
Q

Как работает метод hashCode() по умолчанию?

A

Метод hashCode() по умолчанию возвращает уникальное целочисленное значение, основанное на внутреннем представлении адреса объекта в памяти.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
7
Q

Зачем переопределять метод equals()?

A

Метод equals() переопределяют, чтобы сравнивать объекты по логическому содержимому (состоянию), а не по их адресам в памяти. Это полезно, когда нужно определить эквивалентность объектов на основе их полей.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
8
Q

Зачем переопределять метод hashCode()?

A

Переопределение hashCode() необходимо, если вы переопределили equals().
Это делается для того, чтобы объекты, которые считаются равными по методу equals(), имели одинаковый хэш-код, иначе структуры данных на основе хэширования будут работать неправильно.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
9
Q

Какие контракты должны выполняться при переопределении equals() и hashCode()?

A
  1. Рефлексивность: объект должен быть равен самому себе.
  2. Симметричность: если a.equals(b) возвращает true, то и b.equals(a) должно вернуть true.
  3. Транзитивность: если a.equals(b) и b.equals(c), то a.equals(c) должно также вернуть true.
  4. Непротиворечивость: если объекты не изменяются, многократные вызовы equals() должны возвращать одинаковое значение.
  5. Связь с hashCode(): если два объекта равны согласно equals(), то их хэш-коды также должны быть равны.
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
10
Q

Что произойдет, если переопределить equals(), но не переопределить hashCode()?

A

Если переопределить только equals(), но не переопределить hashCode(), то объекты, которые равны по equals(), могут иметь разные хэш-коды.
Это нарушит контракт между equals() и hashCode(), что приведет к ошибкам при работе с хэш-таблицами (например, HashMap, HashSet).

How well did you know this?
1
Not at all
2
3
4
5
Perfectly