Можно ли контролировать идентичность объектов в Java, и если да, то как?

Это тривиальный вопрос программирования. Я не специалист по Java. Скажем, я использую объекты пользовательских классов Company и Employee, аналогично тому, как это делается во многих примерах СУБД:

class Employee
{
    Company company;
}

class Company
{
    String name;
}

Мне нужно гарантировать, что разные объекты Company имеют уникальные имена, т.е. никакие два таких объекта не могут иметь с тем же именем, потому что с моей точки зрения это не имеет смысла, а также просто съедает память - если в IBM работают два сотрудника, то существует единственный объект Company с этим именем , период.

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

Проблема в том, что я не уверен, как это сделать элегантно. Было бы неплохо, если бы не нужно было выполнять поиск O (n) каждый раз, когда запрашивается объект Company с именем - так что, возможно, хэш-карта или двоичное дерево там для моего удобства? Я также хотел бы изменить способ идентификации объектов Company , что приводит меня к следующему: буду ли я отменять Object.equals и / или Object.hashCode ] методы?

7
задан amn 27 September 2010 в 21:01
поделиться