/ / Видалити / звільнити вузол зв'язаного списку в Java. Прохання, будь ласка - java, алгоритм, зв'язаний список

Видалити / вилучити вузол зв'язаного списку в Java. Будь ласка, пропозиція - java, алгоритм, пов'язаний список

Всі, Якщо я повинен був написати функцію для видалення aвузол (задається headNode і дані як вхідні параметри) з пов'язаного списку на Java. Я хотів би знайти вузол, який має "node.data = data", і видалити його, вказавши його попередній вузол на його наступний вузол * ^. Моє питання полягає в тому, ми повинні вказати "бути видалені" вузлом до нуля? звільнити пам'ять? або GC буде дбати про об'єкти, які більше не доступні в купі.

* ^: сказати A-> B-> C-> D, якщо B.data = дані, то зробіть A-> C. є B-> Null необхідним?

Будь ласка, дайте мені знати, якщо його не ясно, я буду редагувати його. Дякую.

Відповіді:

0 для відповіді № 1

Як сказав кожен, вам не потрібно встановлювати йогонуль. Я просто хочу додати, що перед мною було схоже питання, яке може бути не очевидним. Якщо у вас є подвійно пов'язаний список, де кожен вузол посилається на попередній і наступний вузол, наприклад ABCD і ви видаляєте компакт-диск, щоб ви залишилися з AB. вони до цих пір мають посилання на них (з іншого).


6 для відповіді № 2

Якщо ви хочете видалити Node B, вам просто потрібно, щоб A вказував на C. Збирач сміття буде піклуватися про ваші B-вузли, оскільки не залишиться ніяких посилань.

Нижче наводиться пояснення http://javarevisited.blogspot.com/2011/04/garbage-collection-in-java.html

Об'єкт має право на збір сміттяабо GC, якщо його не можна отримати з будь-яких живих потоків або будь-яких статичних змін, іншими словами, можна сказати, що об'єкт стає придатним до збору сміття, якщо всі його посилання нульові. Циклічні залежності не враховуються як посилання, тому якщо об'єкт A має посилання на об'єкт B і об'єкт B має посилання на об'єкт A, і вони не мають жодної іншої живої посилання, тоді обидва об'єкти A і B матимуть право на збір сміття.

Як правило, об'єкт стає придатним для збору сміття в Java на наступних випадках:

1) Всі посилання на цей об'єкт явно встановлюються як null, наприклад object = null

2) Об'єкт створюється всередині блоку, і посилання виходить з області видимості після виходу з блоку керування.

3) Батьківський об'єкт встановлений на null, якщо об'єкт утримуєтьсяпосилання на інший об'єкт і при встановленні посилання об'єкта контейнера null, дочірній або міститься об'єкт автоматично стає придатним для збору сміття.

4) Якщо об'єкт має тільки живі посилання через WeakHashMap, він матиме право на збір сміття.


0 для відповіді № 3

Ні, ви не повинні встановлювати B на null. Збірник сміття Java звільнить пам'ять для будь-якого об'єкта, якого більше не можна досягти.