2015-03-19 3 views
0

Если я не знаю, сколько элементов массива будет иметь, я могу сделатьAndroid массивы неизвестного количества элементов

long[] longarray = new long[99]; 

, а затем

longarray[0] = 11; 
longarray[1] = 22; 
longarray[2] = 33; 

? поэтому, я буду оценивать с 5 до 60 позиций.

Имеет ли декларация из 99 предметов много памяти?

МОЙ ОТВЕТ:

long[] longarray = new long[1]; 
long[] temparray; 
int cnt = -1; 
int cntp; 
... 
public void myAdd(long value) { 
    cnt++; 
    cntp = cnt + 1; 
    if (cnt == 0) { longarray[0] = value } //the first time 
    else { 
    temparray = new long[cnt]; 
    System.arraycopy(longarray, 0, temparray, 0, cnt); 
    longarray = new long[cntp]; 
    System.arraycopy(temparray, 0, longarray, 0, cnt); 
    longarray[cnt] = value; 
    } 
} 

Это поясню, что listarray добавить() делает.

+1

Но как правило, вы использовали бы массивы, когда количество пространства, которое вам нужно, известно правильно? Это довольно опасно, и я бы предложил просто использовать список. – juunas

ответ

0

A длинный занимает 8 байтов в памяти, поэтому массив из 99 длинных (99 * 8) байтов + несколько байтов для служебных данных. Сказать, много ли это или нет, зависит от вашего варианта использования, но для большинства систем это немного.

Но это действительно не очень хорошая практика, и если у вас нет повода для этого, вы действительно должны использовать Список. Они обрабатывают динамическое распределение, например, чемпионы.

И если у вас есть причина не использовать Список, сообщите нам.

+0

Итак, просто запрос инициализации памяти? – Jackt

+0

Мне не нравятся списки, потому что мне нужна производительность, а не «классический/базовый» код, например, C++ ... – Jackt

0

Используйте список. Наиболее распространенные встроенные списки в Java являются ArrayList и LinkedList:

List<Long> longlist = new ArrayList<Long>; 
longlist.add(11); 
longlist.add(22); 
longlist.add(33); 

и т.д. Получить значения с longlist.get(i) где i Ваш индекс.

Смежные вопросы