Comunidad Macuarium: Redimensionar un array en Java - Comunidad Macuarium

Ir a contenido

Página 1 de 1
  • No puedes empezar un nuevo tema
  • No puedes responder a este tema

Options
Redimensionar un array en Java a saco con el java

#1 Usuario offline   noveo 

  • Usuario Activo
  • PipPipPip
  • Buscar Temas
  • Grupo: Usuarios Activos
  • Mensajes: 632
  • Registrado: 22-August 03

Publicado 21 August 2004 - 07:57 AM

Nas,

podeis hecharme una mano con esto?

¿Puedo crear un array dinámico en Java?
Tengo que crear una tabla que contenga un array de objetos. Las columnas las se, son fijas, pero las filas no, tanto pueden ser 400 como 500. De momento lo tengo hecho con un array fijo:

Object[][] contenido_tabla = new Object[1000][9];

Pero si meto 500 elementos me sobran 500 filas en blanco. Me gustaría que se pudiera hacer algo asi:

Object[][] contenido_tabla = new Object[][9];

Y añadir elementos al array. ¿Como puedo hacedrlo? He visto por allí algo de Vectores pero no me acabo de aclarar.
iBook G3 900 Mhz - 12" - Combo
640 Mb RAM - Airport
----
MacBook Core 2 Duo 2Ghz
2 gb RAM + Hd 120 Gb
----
Power Mac G4 - 400 Mhz - 640 Mb RAM
HD FW Lacie 80 GB - OS 9.2

#2 Usuario offline   Xin Xic 

  • Usuario Frecuente
  • PipPip
  • Buscar Temas
  • Grupo: Usuarios Frecuentes
  • Mensajes: 154
  • Registrado: 02-May 04

Publicado 21 August 2004 - 12:46 PM

No te lo puedo asegurar, pero en java todos los arrays són dinàmicos, y no necesariamente uniformes. Solo deves usar el valor que quieras de la matriz y voilà. Si le pones dimensión solo al empezar lo único que passa és que te reserva toda la memoria necesaria.

Pero quizá te sea mas útil utilizar otro tipos de contenedors, como Vectores, Mapas, ....


Saludos

#3 Usuario offline   noveo 

  • Usuario Activo
  • PipPipPip
  • Buscar Temas
  • Grupo: Usuarios Activos
  • Mensajes: 632
  • Registrado: 22-August 03

Publicado 21 August 2004 - 05:35 PM

No debe ser dinamico por defecto ya que si creo el array de 100 filas y hay 200 ma sale un error de rango.

En qué consisten los vectores?. Puedes mostrarme de una forma rápida y simple como implementarlos.

Muchas gracias.
iBook G3 900 Mhz - 12" - Combo
640 Mb RAM - Airport
----
MacBook Core 2 Duo 2Ghz
2 gb RAM + Hd 120 Gb
----
Power Mac G4 - 400 Mhz - 640 Mb RAM
HD FW Lacie 80 GB - OS 9.2

#4 Usuario offline   Xin Xic 

  • Usuario Frecuente
  • PipPip
  • Buscar Temas
  • Grupo: Usuarios Frecuentes
  • Mensajes: 154
  • Registrado: 02-May 04

Publicado 22 August 2004 - 01:16 PM

Tenias razón, los arrays deben de redimensionar-se antes de usar-los, però en un array bidimensional para cada fila, puedes poner el número que quieras de colmnas para cada fila, lo que se llama array no uniforme.

También podrias redimensionar un array, creando uno nuevo, haciendo una assignación i eliminando el viejo. Però és un poco chapucero.

Respecto a los otros tipus de contenedores de datos, tienes:
- array: Tamanyo fijo, però de acceso muy ràpido
- Vector: Tamanyo variable, és un array que al aumentar, crea
una copia en un array mayor. java.util.Vector
- BitSet: Vector de bits. Bueno en cuanto a tamanyo, però lento
en el acceso.
- Stack: Pués la pila de toda la vida.
- Hashtable: Pués un mapa, un conjunto de datos referenciados por
una clave (manual o automàtica) que acelera la
búsqueda de un dato. Ideal en buscas aleatorias.
- Set: Variante
- List: Variante
- Map: Variante

Todas estas classes heredan de la classe Collection que ofrece la funcionalidad bàsica para todas ellas.

Te recomiendo que tengas a mano la documentación de las API's de Java para tener a mano toda la potència de su framwork. Seguro que entonces encuentras la mejor classe para tus necessidades o té heredas una nueva que se adapte mejor a tus necesidades.

Salut.

#5 Usuario offline   Xtampida 

  • Usuario Activo
  • PipPipPip
  • Buscar Temas
  • Grupo: Usuarios Activos
  • Mensajes: 412
  • Registrado: 18-October 01

Publicado 27 August 2004 - 01:15 AM

En principio, si lo quieres hacer con Arrays, decirte que a la hora de inicializar el array, tienes que especificar siempre el tamaño del primer índice. Me explico, si quieres un array bidimensional de objetos genéricos, como ponías en tu ejemplo, la inicialización debería ser así:

Object[][] contenido_tabla = new Object[9][];

Esta línea de código crearía un array unidimensional capaz de albergar 9 arrays de objetos. Es un poco lioso de explicar, porque en realidad en Java todos los arrays son unidimensionales, sólo que nada te impide crear un array de otro objeto array. Bueno que me parece que lo estoy liando aún mas.

Ahora lo que tendrías que hacer sería ir creando los nueve arrays de objetos unidimensionales del tamaño que necesites e ir asignándoselos a tu array de arrays ;)

De todas formas habría muchas formas de abordar este problema, así que si fueses algo más específico, sobre todo en lo que concierne a la introducción de los datos (objetos) en el array, igual podría darte una respuesta más concreta.
See you, space cowboy ...

#6 Usuario offline   noveo 

  • Usuario Activo
  • PipPipPip
  • Buscar Temas
  • Grupo: Usuarios Activos
  • Mensajes: 632
  • Registrado: 22-August 03

Publicado 27 August 2004 - 07:20 AM

Wueno, la verdad es que me has liado más :D jjj. Pero he solucionado el problema de una forma poco ortodoxa.

Creo otro array con +1 de filas y vuelco el otro. Un poco chapuzas, como dice Xin Xic, pero funciona.
iBook G3 900 Mhz - 12" - Combo
640 Mb RAM - Airport
----
MacBook Core 2 Duo 2Ghz
2 gb RAM + Hd 120 Gb
----
Power Mac G4 - 400 Mhz - 640 Mb RAM
HD FW Lacie 80 GB - OS 9.2

#7 Usuario offline   Xin Xic 

  • Usuario Frecuente
  • PipPip
  • Buscar Temas
  • Grupo: Usuarios Frecuentes
  • Mensajes: 154
  • Registrado: 02-May 04

Publicado 27 August 2004 - 10:34 AM

noveo, mejor utiliza un Vector. Pués hace eso de forma transparente.

A demás, no lo hace de 1 en 1 sinó de 10 en diez, con lo que se reduce el trabajo de assignación. Fijate que el intervalo de 10 puede modificarse segun tus necesidades, al crear el vector.

Salut,
Xin Xic

Este tema ha sido editado por Xin Xic: 27 August 2004 - 10:36 AM


#8 Usuario offline   donut2k 

  • Usuario
  • Pip
  • Buscar Temas
  • Grupo: Usuarios Recientes
  • Mensajes: 70
  • Registrado: 26-May 04

Publicado 27 August 2004 - 12:19 PM

hola,

mi granito de arena: los arrays no se redimensionan...

Lo que puedes hacer, una vez sepas el tamaño es copiarlo a uno más pequeño:
http://java.sun.com/j2se/1.4.2/docs/api/ja...,%20int,%20int)

o si prefieres, como te han comentado... una Collection quizá te vaya mejor.

un saludo

#9 Usuario offline   Xin Xic 

  • Usuario Frecuente
  • PipPip
  • Buscar Temas
  • Grupo: Usuarios Frecuentes
  • Mensajes: 154
  • Registrado: 02-May 04

Publicado 27 August 2004 - 05:57 PM

donut2k, creo que tu consejo lo que hace és una copia de los objetos, con el conseqüente incremento de tiempo para hacer la copia, al contrario que la assignación que solo copia la referènia de los objetos.

Salut

#10 Usuario offline   Xtampida 

  • Usuario Activo
  • PipPipPip
  • Buscar Temas
  • Grupo: Usuarios Activos
  • Mensajes: 412
  • Registrado: 18-October 01

Publicado 29 August 2004 - 08:24 PM

Cita

Wueno, la verdad es que me has liado más


:D La verdad es que me lo temía.

Bueno, como dice Xin Xic, lo mejor en estos casos es usar un Vector, o en su defecto un ArrayList (si no vas a utilizar hilos en el programa).

Si lo quieres niquelar ;) create una clase propia para encapsular todo el tinglao.
See you, space cowboy ...

Compartir este tema:


Página 1 de 1
  • No puedes empezar un nuevo tema
  • No puedes responder a este tema