Обычная версия
Java форум JavaTalks
форум программистов

Поиск   Пользователи   Группы   Регистрация 
 Профиль   Личные сообщения 

 Вход 

Очистка коллекции
Список форумов
 ->  Коллекции (Java Collection Framework)


На страницу 1, 2  След. 
Начать новую тему 
Предыдущая тема :: Следующая тема  
Автор Сообщение
androed : 29
Новичок

СообщениеАвг 12, 2011 23:43 
Ответить с цитатой
Привет
Допустим есть какой-нибудь array
Код:

ArrayList<MyObject> aList = new ArrayList<MyObject>();
for(int i=0; i<10; i++) {
aList.add(new MyObject("name",i);
}


Как его потом правильно очистить? Достаточно
Код:

aList = null;

или нужно типа
Код:

for(MyObject obj : aList) {
obj = null;
}
aList = null;


Спасибо
К началу Посмотреть профиль Отправить личное сообщение
androed : 29
Новичок

СообщениеАвг 12, 2011 23:46 
Ответить с цитатой
хотя 1 вариант неправильный
К началу Посмотреть профиль Отправить личное сообщение
Староверъ : 7620
Ктапубеп
Откуда: Elfland

СообщениеАвг 12, 2011 23:51 
Ответить с цитатой
ArrayList#clear()
_________________
JTalks Open Source Project, JT Webinars, JT Interview
К началу Посмотреть профиль Отправить личное сообщение Отправить e-mail
androed : 29
Новичок

СообщениеАвг 13, 2011 11:17 
Ответить с цитатой
Староверъ писал(а):
ArrayList#clear()


Спб. за это я знаю. Я имел виду "ручной" способ. Как правильнее?
К началу Посмотреть профиль Отправить личное сообщение
Dagdamor : 406
Бывалый

СообщениеАвг 13, 2011 12:22 
Ответить с цитатой
Это и есть ручной способ.
_________________
Java и трассировка лучей
К началу Посмотреть профиль Отправить личное сообщение
androed : 29
Новичок

СообщениеАвг 13, 2011 13:12 
Ответить с цитатой
Dagdamor писал(а):
Это и есть ручной способ.


Допустим что такой функции нет
К началу Посмотреть профиль Отправить личное сообщение
Dagdamor : 406
Бывалый

СообщениеАвг 13, 2011 13:23 
Ответить с цитатой
Это советского союза больше нет.
А метод clear() у коллекций есть.
Вы объясните русским языком, что вы пытаетесь сделать?
_________________
Java и трассировка лучей
К началу Посмотреть профиль Отправить личное сообщение
androed : 29
Новичок

СообщениеАвг 13, 2011 13:34 
Ответить с цитатой
Dagdamor писал(а):
Это советского союза больше нет.
А метод clear() у коллекций есть.
Вы объясните русским языком, что вы пытаетесь сделать?


да ничего, просто хотел узнать, правильный ли такой способ очистки коллекции, и все.
К началу Посмотреть профиль Отправить личное сообщение
Dagdamor : 406
Бывалый

СообщениеАвг 13, 2011 13:43 
Ответить с цитатой
Если мсье хочет извратиться, можете пересоздать коллекцию:

Код:
myCollection = new ArrayList();

_________________
Java и трассировка лучей
К началу Посмотреть профиль Отправить личное сообщение
Taky_ : 491
Бывалый

СообщениеАвг 13, 2011 13:53 
Ответить с цитатой
Вот реализация clear в ArrayList:
Код:
    /**
     * Removes all of the elements from this list.  The list will
     * be empty after this call returns.
     */
    public void clear() {
   modCount++;

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

   size = 0;
    }

P.S. Кажется такой вопрос уже поднимался...
К началу Посмотреть профиль Отправить личное сообщение
drfits : 63
Новичок
Откуда: Гомель

СообщениеАвг 13, 2011 14:04 
Ответить с цитатой
И ещё, правильно насловать через интерфейс и это надо запомнить!
Код:
List<MyObject> aList = new ArrayList<MyObject>();
К началу Посмотреть профиль Отправить личное сообщение Посетить сайт автора ICQ Number
Dagdamor : 406
Бывалый

СообщениеАвг 13, 2011 14:41 
Ответить с цитатой
Насиловать?
_________________
Java и трассировка лучей
К началу Посмотреть профиль Отправить личное сообщение
androed : 29
Новичок

СообщениеАвг 13, 2011 14:41 
Ответить с цитатой
Dagdamor писал(а):
Если мсье хочет извратиться, можете пересоздать коллекцию:

Код:
myCollection = new ArrayList();


не очень хороший способ, т.к. массив может быть объявлен как final
К началу Посмотреть профиль Отправить личное сообщение
androed : 29
Новичок

СообщениеАвг 13, 2011 14:43 
Ответить с цитатой
drfits писал(а):
И ещё, правильно насловать через интерфейс и это надо запомнить!
Код:
List<MyObject> aList = new ArrayList<MyObject>();


для десктопа да., для моб. нет
К началу Посмотреть профиль Отправить личное сообщение
mpoSimba : 124
Новичок

СообщениеАвг 13, 2011 14:56 
Ответить с цитатой
Цитата:
Код:
List<MyObject> aList = new ArrayList<MyObject>();


Интерфейс List и ArrayList различны (например метод trimToSize). По принципу подстановки Лиска везде, где есть List, можно использовать ArrayList, но не наоборот.

Неверное использование:

Код:

//...
void SomeMethod(List<SomeClass> list_);
//...

List<SomeClass> list = new ArrayList<SomeClass>();
//...
SomeMethod(list);


Здесь безвозвратно утеряна информация о настоящем контракте list и может быть восстановлена только рефлекцией с нарушением контракта.

Правильно

Код:

//...
void SomeMethod(List<SomeClass> list_);
//...

ArrayList<SomeClass> aList = new ArrayList<SomeClass>();
//...
SomeMethod(aList);


Верный контракт aList не утерян.
К началу Посмотреть профиль Отправить личное сообщение
 
Начать новую тему  Ответить на тему
Страница 1 из 2
На страницу 1, 2  След.
Список форумов
 -> Коллекции (Java Collection Framework)


 
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах


Java and all Java-related trademarks and logos are trademarks or registered trademarks of Oracle Corporation in the United States and other countries.
Это сайт не относится к фирме Oracle Corporation и не поддерживается ею.

© 2006-2010 www.javatalks.ru: форум java программистов
Используется скрипт phpBB © 2001, 2010 phpBB Group

Хостинг от bizname.ru