web-dev-qa-db-fra.com

Comment déclarer un tableau de chaînes [] de taille inconnue (Java)

Je veux que mon String[] array; soit statique mais je ne connais toujours pas sa taille.

Est-il possible de déclarer un tableau de chaînes de taille inconnue? Autant que possible, je ne souhaite pas utiliser ArrayList

5
tin

Vous n'avez pas besoin de connaître la taille du tableau lorsque vous declare it

String[] myArray;

mais vous devez connaître la taille lorsque vous initialisez (car Java Virtual Machine doit réserver un bloc de mémoire continu pour un tableau upfront):

myArray = new String[256];

Si vous ne savez pas quelle taille il faudra avoir au moment de l'initialiser, vous aurez besoin d'un List<String>, ou vous serez obligé de faire votre propre implémentation (ce qui est certainement une option pire).

15
Jiri Tousek

Non, elle doit être déclarée et doit donc avoir une longueur avant de pouvoir y définir des éléments.

Si vous souhaitez redimensionner un tableau, vous devrez faire quelque chose comme: Développer un tableau?

3
steveman
String [] array = new String[1];

ce sera la poubelle collectée plus tard après que vous ayez initié un vrai tableau de n éléments.

array = new String[n];

bien sûr, il a une baisse de performance, mais il devrait être sans importance, sauf si vous répétez la même chose pour de nombreux tableaux différents.

3

Utiliser Java.util.ArrayList ou LinkedList est la méthode habituelle. Avec les tableaux ce n'est pas possible comme je le sais.

Exemple:

Liste unindexedVectors = new ArrayList ();

unindexedVectors.add (2.22f);

unindexedVectors.get (2);

1
Vaibhav Walke

Le list est préférable pour la manipulation d'un "tableau" pour lequel vous ne connaissez pas la longueur. 

1
MiOnIs

Mes excuses aux non-diseurs, cela peut être fait facilement.

import Java.util.Random;

public class Roll_2 {
static Random random = new Random();

public static void main(String[] args) {
int[] variableArray1 = init(random.nextInt(9)); // random size
int[] variableArray2 = init(random.nextInt(9)); // random size
int[] variableArray3 = init(random.nextInt(9)); // random size

randomaize(variableArray1); // randomize elements
randomaize(variableArray2); // randomize elements
randomaize(variableArray3); // randomize elements

print(variableArray1);  // print final
print(variableArray2);  // print final
print(variableArray3);  // print final
}
private static int[] init(int x) {
int[] arr = new int[x];
return arr;
}
private static void print(int[] body) {
System.out.print("[");
for (int i=0;i<body.length;i++) {
System.out.print(body[i]);
if (i<body.length-1) System.out.print(" ");
}
System.out.println("]");
}
private static void randomaize(int[] body) {
for (int i=0;i<body.length;i++) {
body[i] = random.nextInt(9);
}
}
}

Exemple de cycle 1: [1 7 2] [5 2 8 6 8 3 0 8] []

Exemple de cycle 2: [2 5 6 8 0 7 0 6] [0 0 1] [2 1 2 1 6]

Exemple de cycle 3: [8 3 3] [7] [1 3 7 3 1 2]

0
Ray Mulgrew