我已經多次面對這個非常基本的東西,但我從不知道如何以最有效的方式解決它。如何最有效地更新2個相互依賴的類中的數據
我有一堂課'學生'和一堂課'課程'。學生應該通過一系列課程知道他所有的課程,課程應該通過一系列學生知道所有正在訪問的學生。
現在讓我們說,我想學生參觀新的課程,所以我創建一個「addCourse(課程學習)」的方法,以新課程加入課程的學生的名單 - 沒問題。但我也想讓課程知道學生現在正在訪問它。所以我爲課程課程創建了一個'addStudent(Student student)'方法,並在學生的'addCourse'方法中調用它。
問題是:我想讓這些數據更新可能來自雙方 - 學生和課程,但是如果我要將相應的其他方法添加到自己的方法中,我最終會遇到堆棧溢出。那麼我怎樣才能最有效地防止這種情況?
另外,如果我存儲在這兩個類的對象這個數據,我想我會淹沒我的記憶中有更多的數據比我更需要。有沒有辦法來防止這種情況,而不會失去對數據的訪問?
我完全同意你的解決方案的第一部分,即最好有兩個add ...方法和一個單獨的to方法來創建雙向關係。不過,我建議使用引用而不是ID。它們不太容易出錯,需要更少的空間(假設Java中使用「Integer」),並且它們更容易遍歷。我不會擔心你的記憶會「氾濫」,這些雙向引用應該不是問題。 – TilmannZ
@TilmannZ:無論你喜歡什麼。但是,請注意,「整數」是32位。在32位系統上,參考值爲32位,但在64位系統上爲64位。但是,可能無關緊要,除非你正在談論數千億記錄。 –
我大多同意。如果你編譯爲64位,你會得到64位指針。如果你編譯的是32位(限於4GB左右,你可以獲得32位引用,即使是在64位系統上(我認爲).Java有點不同,因爲Java壓縮參考文獻,只要你選擇少於32位32GB的內存,即使在64位的JVM上也是如此 – TilmannZ