методы clear () в Java - PullRequest
       22

методы clear () в Java

5 голосов
/ 11 ноября 2009

Многие структуры данных контейнерного типа в Java поставляются с методом clear(). Например, мы можем вызвать clear() на Vector, мы хотим очистить все содержимое в Vector. Мой вопрос: после применения метода clear() содержимое в векторе обнуляется или на него все еще ссылаются? Спасибо.

Ответы [ 6 ]

9 голосов
/ 11 ноября 2009

На них больше нет ссылок в Коллекции, но если у вас есть какие-либо ссылки в вашем коде, эта ссылка продолжает существовать, как была

Как уже упоминалось, источник Vector вызывает:

// Let gc do its work
for (int i = 0; i < elementCount; i++)
    elementData[i] = null;

Однако эта внутренняя ссылка устанавливается равной нулю (передача по значению) и не влияет на внешние ссылки.

8 голосов
/ 11 ноября 2009

Они не обнуляются - это не имеет смысла, только ссылка становится нулевой, а не значение - они просто получают разыменованную . Если они не имеют никакой другой ссылки на него (например, другой класс, на который она ссылается как статическая переменная или переменная экземпляра), тогда они будут иметь право на GC.

5 голосов
/ 11 ноября 2009

Если на них нет ссылок из других источников, они будут собираться мусором.

3 голосов
/ 11 ноября 2009

Когда вы сомневаетесь, вы можете просто взглянуть на исходный код - он связан с JDK (обычно в файле с именем rt.zip).

public void clear() {
    removeAllElements();
}

public synchronized void removeAllElements() {
    modCount++;
    // Let gc do its work
    for (int i = 0; i < elementCount; i++)
        elementData[i] = null;

    elementCount = 0;
}

Комментарий "Пусть gc делает свою работу" взят из фактического источника, а не из моего.

1 голос
/ 11 ноября 2009
//Let gc do its work
for (int i = 0; i < elementCount; i++) 
    elementData[i] = null;

Это код с комментарием из класса Vector. Это отвечает на вопрос, я думаю.

0 голосов
/ 07 июля 2017
while(!stack.isEmpty()){
    System.out.println(stack.pop());
    System.out.println(stack);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...