Я создаю несколько довольно больших объектов, и многие из них являются дубликатами. Поэтому я думал об использовании Guava Interner
для них и всегда работал только с интернированным объектом (т. Е. Каждый объект получает интернирование сразу после создания).Как избежать медленных равных для интернированных объектов?
Мне пришло в голову, что equals
этих объектов довольно медленно (и привыкает много), и что я на самом деле не нужно, так как a.equals(b)
эквивалентно a == b
после интернирования. К сожалению, сам Interner
использует equals
, поэтому я должен переопределить его для одноразового использования.
Интересно, есть ли простой способ иметь равных и есть?
Отказ от ответственности: Я знаю о root of all evil, и я не уверен, что, если оптимизация на этом месте стоит усилий. Тем не менее, меня интересует, имеет ли вышеупомянутая проблема хорошее решение.
Я не имел в виду, что 'Interner' полагается * исключительно * на equals, это своего рода хэш-карта (на самом деле карта карты MapMaker). Но это единственная причина, по которой мне нужно «равно». Я бы предпочел не переопределять равные из-за его использования на других картах. – maaartinus
Правильно, это разумный способ сделать это. Это означает, что единственный раз, когда вызывается 'equals()', находится на хеш-столкновении, что означает, что редко предоставляется приемлемый метод 'hashcode()' (в зависимости от количества ковшей). И если вы переопределяете 'hashcode()' ... вам нужно переопределить 'equals()' ... для этой же цели в других картах (:: confused: :) –