Ir al contenido


Foto

[RESUELTO] Convertir ArrayList<Clase> a un arreglo del tipo Clase[]


  • Por favor identifícate para responder
9 respuestas en este tema

#1 poliburro

poliburro

    Advanced Member

  • Administrador
  • 4.945 mensajes
  • LocationMéxico

Escrito 27 noviembre 2010 - 03:42

Tengo la clase TEmpleado y la colección ArrayList<TEmpleado>.

La colección la convierto al arreglo con un for lo que me parece muy ineficiente. Conocen alguna manera más optima?

Aquí como lo hago



cpp
  1. ArrayList<TEmpleado> ListEmpleados = new ArrayList<TEmpleado>();
  2. int Licontador=0;
  3. TEmpleado[] ArrEmpleados = Null
  4.  
  5. ListEmpleados.add(new TEmpleado("EmpUno)));
  6. ListEmpleados.add(new TEmpleado("EmpDos)));
  7. ListEmpleados.add(new TEmpleado("EmpTres)));
  8.  
  9. TEmpleado[] ArrEmpleados = Null
  10.  
  11. arrEmpleados = new TEmpleado[ListEmpleados.Size()];
  12. for (Templeado: EmpTemp: LisEmpleados) {
  13.   arrEmpleados[LiContador] = EmpTemp;
  14.   LiContador++;
  15. }




De antemano gracias por la ayuda.
  • 0

#2 escafandra

escafandra

    Advanced Member

  • Administrador
  • 4.107 mensajes
  • LocationMadrid - España

Escrito 27 noviembre 2010 - 05:49

¿Estas trabajando con Builder?.

Me da la sensación de que ArrayList es una clase genérica realizada con Template. Si es así, no es un array pero se puede comportar como tal.

Si trabajas con Builder, recuerda que tiene la clase TList que es una clase para manejar Arrays de punteros cómodamente.[font=verdana][size=small]
En último lugar, decirte que si lo que realmente necesitas es simplemente un array, trabaja solo con él. Claro que debes conocer de antemano el número de elementos o darle un tamaño suficiente.



cpp
  1. TEmpleado ArrEmpleados[100];
  2. ArrEmpleados[0] = new TEmpleado("EmpUno");
  3. ArrEmpleados[1] = new TEmpleado("EmpDos");
  4. ArrEmpleados[2] = new TEmpleado("EmpTres");



Saludos.
  • 0

#3 poliburro

poliburro

    Advanced Member

  • Administrador
  • 4.945 mensajes
  • LocationMéxico

Escrito 29 noviembre 2010 - 09:52

Saludos amigo escafandra.

Estoy trabajando con Java. Resulta que el arreglo lo utilizo para cargar datos que obtengo del resultado de una consulta a mi base de datos. Y este arreglo lo devuelvo a través de un webservice. En java existe también la clase TList pero me funciona mejor en este caso la clase ArrayList. Mi inquietud nace del optimizar la transferencia de los punteros de mis objetos de la clase arraylist que no me exige saber de inicio el número de elementos a mi Arreglo.

Saludos.
  • 0

#4 lezamablr

lezamablr

    Member

  • Miembros
  • PipPip
  • 25 mensajes

Escrito 29 noviembre 2010 - 11:09

El método toArray() no te sirve?
http://download.orac....html#toArray()
  • 0

#5 poliburro

poliburro

    Advanced Member

  • Administrador
  • 4.945 mensajes
  • LocationMéxico

Escrito 29 noviembre 2010 - 11:23

El método toArray() no te sirve?
http://download.orac....html#toArray()


Gracias amigo Lezama, fijate que probé con ese método pero como el to array me devuelve un tipo TObject no pude asignarlo a mi variable Templeado[] Empleados;

:(
  • 0

#6 lezamablr

lezamablr

    Member

  • Miembros
  • PipPip
  • 25 mensajes

Escrito 29 noviembre 2010 - 11:41

Pero si usas algún tipo de casting, tomando en cuenta que todo deriva de TObject, incluyendo tu clase TEmpleado.

No me acuerdo como se hace en Java, pero se que ese tipo de métodos devuelven TObject porque el compilador ignora que tipos son los que va a almacenar el usuario, así que se va por la fácil y devuelve la superclase Object.
  • 0

#7 poliburro

poliburro

    Advanced Member

  • Administrador
  • 4.945 mensajes
  • LocationMéxico

Escrito 29 noviembre 2010 - 11:48

Pero si usas algún tipo de casting, tomando en cuenta que todo deriva de TObject, incluyendo tu clase TEmpleado.

No me acuerdo como se hace en Java, pero se que ese tipo de métodos devuelven TObject porque el compilador ignora que tipos son los que va a almacenar el usuario, así que se va por la fácil y devuelve la superclase Object.


Aún así gracias por el norte, yo creo que buscaré la manera de hacerlo con el cast. aunque tendré que buscar un poco más de info sobre como hacerlo je, por que verás que yo apenas estoy entrpandole a java y muchas cosas aún no me parecen muy faciles de hacer :p


Saludos cordiales.
  • 0

#8 lezamablr

lezamablr

    Member

  • Miembros
  • PipPip
  • 25 mensajes

Escrito 29 noviembre 2010 - 11:56

A mi alguna vez me diero el tip de que el primer lugar donde debes de buscar es en la documentación oficial de Java, con que pongas en San Google: Java Api + <Clase que quieres buscar> y voilá... aunque según crep antes del Lista.ToArray() debes poner entre paréntesis List<TEmpleado>, o algo así:
tuArray = (List<TEmpleado>) Emp.toArray();

  • 0

#9 poliburro

poliburro

    Advanced Member

  • Administrador
  • 4.945 mensajes
  • LocationMéxico

Escrito 29 noviembre 2010 - 12:31

A mi alguna vez me diero el tip de que el primer lugar donde debes de buscar es en la documentación oficial de Java, con que pongas en San Google: Java Api + <Clase que quieres buscar> y voilá... aunque según crep antes del Lista.ToArray() debes poner entre paréntesis List<TEmpleado>, o algo así:
tuArray = (List<TEmpleado>) Emp.toArray();


Amigo muchisimas gracias por tu ayuda. Probando con la solución que me diste encontré que se puede hacer de la siguiente manera:





csharp
  1. ArrayList<TEmpleado> ListEmpleados = new ArrayList<TEmpleado>();
  2. TEmpleado[] ArrEmpleados = Null
  3.  
  4. ListEmpleados.add(new TEmpleado("EmpUno)));
  5. ListEmpleados.add(new TEmpleado("EmpDos)));
  6. ListEmpleados.add(new TEmpleado("EmpTres)));
  7.  
  8. arrEmpleados = new TEmpleado[ListEmpleados.Size()];
  9. arrEmpleados=ListEmpleados.toarray(arrEmpleados);




El truco está en pasar como parámetro el tipo de arreglo que deseas obtener,

Saludos
  • 0

#10 lezamablr

lezamablr

    Member

  • Miembros
  • PipPip
  • 25 mensajes

Escrito 29 noviembre 2010 - 12:53

Vientos! que bueno que si pudiste... si te surge alguna otra duda, en lo que te pueda ayudar, ya sabes.
  • 0




IP.Board spam blocked by CleanTalk.