|
Java форум JavaTalks форум программистов
|
|
|
|
| Предыдущая тема :: Следующая тема |
| Автор |
Сообщение |
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);
}
|
Как его потом правильно очистить? Достаточно
или нужно типа
| Код: |
for(MyObject obj : aList) {
obj = null;
}
aList = null;
|
Спасибо |
|
|
|
 |
androed : 29 Новичок
|
Авг 12, 2011 23:46 |
|
|
| хотя 1 вариант неправильный |
|
|
|
 |
Староверъ : 7620 Ктапубеп Откуда: Elfland
|
Авг 12, 2011 23:51 |
|
|
|
|
|
|
 |
androed : 29 Новичок
|
Авг 13, 2011 11:17 |
|
|
| Староверъ писал(а): |
| ArrayList#clear() |
Спб. за это я знаю. Я имел виду "ручной" способ. Как правильнее? |
|
|
|
 |
Dagdamor : 406 Бывалый
|
Авг 13, 2011 12:22 |
|
|
|
|
|
|
 |
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>(); |
|
|
|
|
 |
Dagdamor : 406 Бывалый
|
Авг 13, 2011 14:41 |
|
|
|
|
|
|
 |
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 не утерян. |
|
|
|
 |
|
|
|