¿alguien puede decirme el error en esta declaración java String[][] t=new String[15][15];
esto funciona bien y si uso String[][] t=new String[][];
porque tengo que declarar la variable t tan dinámica como no estoy seguro de cuánto valores voy a almacenar En t.declaración de matriz dinámica en java
Respuesta
Utilice ArrayList (u otro objeto de matriz que pueda manejar cualquier cantidad de objetos). Una matriz Java siempre tiene una longitud fija, ya que parte de la memoria se reservará para la matriz.
ArrayList crea dicha matriz también para almacenar los objetos. De usted agrega más objetos como el tamaño reservado actual de la matriz que ArrayList creará una nueva matriz más grande (+ 50% si estoy en lo cierto). Hay algunas otras implementaciones que actúan un poco diferente (por ejemplo, crean una nueva matriz 100% de la original cuando la matriz está llena. Si el rendimiento es realmente importante para usted que se puede mirar en esto.
ArrayList<ArrayList<String> t = new ArrayList<ArrayList<String>();
void fill() {
ArrayList<String> t2 = new ArrayList<String>();
t2.add("somestring");
String s = "someotherstring";
t2.add(s);
t.add(t2);
}
Si usted no sabe lo grande que tiene que ser sólo declarará como
String[][] t;
y una vez que sabes lo grande que necesita ser que puede hacer (antes tratando de utilizar la matriz)
t = new String[15][15];
Si nunca está seguro de cuán grande debe ser el conjunto, deberá usar algo así como una Lista de listas.
List<List<String>> t = new ArrayList<List<String>>;
public void add(String str, int row, int col) {
while (row >= t.size())
t.add(new ArrayList<String>());
List<String> row_list = t.get(row);
while (col >= row_list.size())
row_list.add("");
row_list.set(col, str);
}
si uso 'String [] [] t = null; 'Obtengo un error que Exception in thread" main "java.lang.NullPointerException mientras lo usa' t [0] [0] = "ana" ' – raju
@raju: aún necesita hacer' t = new String [sizeX ] [sizeY]; '* after * has descubierto cuáles son las dimensiones, pero * antes * de tu asignación' t [0] [0] = '. –
En Java los objetos de matriz son siempre de longitud fija. Una vez que los haya asignado, no podrá cambiar su tamaño. Se puede hacer una matriz variable para apuntar a diferentes objetos de matriz de diferentes tamaños. Por lo que puede asignar:
String[][] t;
que no apuntar a un objeto y asignar un objeto más adelante una vez que se conoce el tamaño:
int n1,n2;
// calculate n1,n2
t = new String[n1][n2];
Si necesita una estructura en la que el tamaño puede cambiar usted está es mucho mejor usar ArrayList, que puede cambiar de tamaño dinámicamente.
un vector puede crecer demasiado:
Vector<Vector<String>> t = new Vector<Vector<String>>();
luego llamar al método Add para agregar elementos al vector.
¿Por qué vector? Está innecesariamente sincronizado. – Ishtar
Como dijo bemace, solo porque esté declarando la variable no significa que deba inicializarla de inmediato.
Como dijo Mark, las matrices tienen un tamaño fijo. Una vez que una matriz es inicializada (no declarada, inicializada), tiene un tamaño fijo.
Por lo tanto, hay dos posibilidades:
O se va a saber el tamaño de la matriz tiene que ser antes de tener que comenzar a usarlo, en cuyo caso sólo tiene que retrasar su inicialización según lo sugerido por bemace.
O no sabrá qué tan grande debe ser antes de empezar a usarlo, en cuyo caso deberá usar una estructura de datos de tamaño dinámico.Echa un vistazo a la API de Java Colecciones:
declararemos como String [][]t = null;
Y Fecha con longitud real vez que lo consigue.
t=new String[x][y];
mejor manera de usar el caso real. – Simmant
Hay varias buenas respuestas ya, pero ahora se ha puesto de manifiesto en un comentario a Mark Baijens' answer que el propósito de esta pregunta es que Raju necesita una llave para de valores múltiples mapeo.
Marca siguió ese comentario sugiriendo raju usar un HashMap<String, String> hashMap = new HashMap<String, String>();
— sin embargo, eso solo funciona para un solo par de clave-valor.
Lo que necesita es un Raju
Map<String, Collection<String>> t
= new HashMap<String, List<String>>();
Añadiendo el primer valor de una clave requiere la inicialización de una lista de ese cubo, al tiempo que añade valores adicionales requiere ir a buscar la lista existente y añadiendo el nuevo valor.
Nota Utilicé Collection<String>
en la declaración, por lo que podría ser una lista si el orden de los valores es importante, o podría ser un conjunto para evitar valores duplicados con la misma clave.
Esto probablemente sería mejor implementado como una clase en sí, tal vez
public class MultiValueMap<K, V> extends Map<K, V>
{
...
}
por lo que la inicialización de la lista de la primera put(key, value)
y la posterior .add(value)
a la lista podría estar oculto en la aplicación.
- 1. Declaración dinámica similar en SQL
- 2. ¿Matriz dinámica en pila?
- 3. Declaración de una matriz de matrices de bytes en Java
- 4. Java función dinámica llamando
- 5. AddDynamicParams Dapper de declaración en la "dinámica" nombre de parámetro
- 6. Construir matriz dinámica en PHP
- 7. Arrays de longitud variable (dinámica) en Java
- 8. teclas matriz dinámica
- 9. Java anotación tipografía dinámica
- 10. matriz dinámica de punteros a estructuras
- 11. matriz cuando no esté en una declaración
- 12. matriz de selección dinámica en PHP
- 13. Copiar matriz const de matriz dinámica en Delphi
- 14. Número de elementos en matriz estática y matriz dinámica
- 15. Cómo crear una matriz dinámica
- 16. C++ declaración de matriz en un encabezado
- 17. javascript - Crear matriz dinámica simple
- 18. Crea una matriz multidimensional dinámica
- 19. ¿Cómo inicializar una matriz dinámica en C++?
- 20. Asignación dinámica de una matriz de estructuras
- 21. El aumento de tamaño de matriz dinámica
- 22. Declaración de actualización dinámica con nombres de columna variables
- 23. ¿Cómo crear una matriz de funciones de forma dinámica?
- 24. Función de invocación dinámica en java
- 25. Carga dinámica de módulos en Java
- 26. Cómo crear una matriz dinámica de enteros
- 27. memoria dinámica para matriz de caracteres 2D
- 28. C++ valor inicial de la matriz dinámica
- 29. Asignación de matriz de encadenamiento en Java
- 30. Formateo de la declaración de matriz asociativa
Una matriz Java siempre tiene una longitud FIJA, no un máximo. Algunas de las entradas pueden ser nulas. – DJClayworth
su derecho, lo corrigió. –
Si bien esto es posible, debe crear una ArrayList de (ArrayList of String), y 's = t [3] [12];' se convierte en 's = t.get (3) .get (12);' –