2015-03-19 1 views
0

Si je ne sais pas combien de gamme articles aura, je peux fairetableaux Android du nombre inconnu d'éléments

long[] longarray = new long[99]; 

puis

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

? ainsi, sera créé d'environ 5 à 60 articles, j'estime.

La déclaration de 99 éléments nécessite-t-elle beaucoup de mémoire?

MA REPONSE:

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; 
    } 
} 

C'est basiquement ce que ListArray add() fait.

+1

Mais normalement, vous utiliseriez des tableaux lorsque la quantité d'espace dont vous avez besoin est connue? C'est assez dangereux, et je suggère simplement d'utiliser une liste. – juunas

Répondre

0

Un long prend 8 octets en mémoire, donc un tableau de 99 longs prend (99 * 8) octets + quelques octets pour les frais généraux. Dire si c'est beaucoup ou pas dépend vraiment de votre cas d'utilisation, mais pour la plupart des systèmes ce n'est pas beaucoup.

Mais ce n'est vraiment pas une bonne pratique, et si vous n'avez pas une bonne raison de ne pas le faire, vous devriez vraiment utiliser une liste. Ils gèrent l'allocation dynamique comme les champions.

Et si vous avez une raison de ne pas utiliser une liste, veuillez nous en informer.

+0

Donc, juste l'initialisation demande la mémoire? – Jackt

+0

Je n'aime pas les listes car j'ai besoin de performance et ce n'est pas du code "classique/basique", comme C++ ... – Jackt

0

Utiliser une liste. La plupart des communes listes intégrées en Java sont ArrayList et LinkedList:

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

etc. Récupérer des valeurs avec longlist.get(i)i est votre index.