Я столкнулся с этой самой простой вещью несколько раз сейчас, но я никогда не знал, как ее решить самым эффективным способом.Как обновить данные в 2 взаимозависимых классах наиболее эффективно
У меня есть класс «Студент» и класс «Курс». Студент должен знать все свои курсы, которые он посещает, по списку курсов, и курс должен знать всех студентов, которые посещают его по списку студентов.
Теперь предположим, что я хочу, чтобы студент посетил новый курс, поэтому я создаю метод addCourse (курс курса) для добавления нового курса в список курсов для студентов - без проблем. Но я также хочу, чтобы курс узнал о том, что студент сейчас посещает его. Поэтому я создаю метод addStudent (Student student) для курса и назову его в методе «addCourse» ученика.
Проблема заключается в следующем: я хочу сделать эти обновления данных возможными с обеих сторон - студентов и курсов, но если бы я добавил соответствующий другой метод в свой собственный метод, я бы закончил в переполнении стека, конечно , Итак, как я могу предотвратить это наиболее эффективно?
Также, если я храню эти данные в объектах обоих классов, я предполагаю, что я наполнил бы свою память большим количеством данных, чем мне нужно. Есть ли способ предотвратить это, не теряя доступа к данным?
Я полностью согласен с первой частью вашего решения, то есть хорошо иметь два метода add ... и отдельный метод tat используется для создания двунаправленных отношений. Однако я бы предложил использовать ссылки вместо идентификаторов. Они менее подвержены ошибкам, требуют меньше места (при условии, что «Integer» в Java), и их гораздо легче перемещаться. Я не буду беспокоиться о том, чтобы «наводнить» вашу память, эти двунаправленные ссылки действительно не должны быть проблемой. – TilmannZ
@TilmannZ: Какой бы вы ни предпочитали. Однако обратите внимание, что «целое число» - 32 бита. Ссылка будет 32 бита в 32-битной системе, но 64 бит в 64-битной системе.Наверное, не имеет значения, если вы не говорите сотни миллиардов записей. –
Я в основном согласен. Если вы скомпилируете 64-битную версию, вы получите 64-битные указатели. Если вы скомпилируете 32-битную (ограниченную до 4 ГБ или около того), вы получите 32-битные ссылки даже на 64-битных системах (я думаю). Java немного отличается, поскольку Java «сжимает» ссылки, они требуют только 32 бит, если вы выбрали меньше 32 ГБ памяти, даже на 64-битной JVM. – TilmannZ