se sigue utilizando vectores(java) ??

Publicado en 'Programación' por situation, 14 Ago 2013.





  1. situation

    situation Suspendido

    Registro:
    4 Jul 2011
    Mensajes:
    318
    Likes:
    8




    Pregunto porque estoy siguiendo un canal en donde enseñan Java pero son videos del año 2012-Febrero para arriba y hay tutoriales de vectores. Pero por ahi he leido un comentario que "ya no se usan" y ahora se usan ArrayList y Iterator.

    Estoy viendo la documentacion de Java y aprendiendo lo que es ArrayList, pero quería saber también, si aun se sigue utizando.
     


  2. tenguman

    tenguman Miembro de plata

    Registro:
    15 Nov 2010
    Mensajes:
    3,142
    Likes:
    1,016
    los ArrayList son mas flexibles, dentro del ArrayList existe un objeto iterator. En lo particular yo prefiero los HashMap, son mas sencillos para realizar busquedas y puedes mantenerlo ordenado automaticamente, pero la desventaja es que los tipos de objetos que puede contener deben ser del mismo tipo.
     
  3. kazoku

    kazoku Miembro maestro

    Registro:
    30 Abr 2012
    Mensajes:
    396
    Likes:
    58
    primero aprende la logica de los VECTORES y de ahi es mas facil entender a los ARRAYLIST
     
  4. eduar2083

    eduar2083 Miembro frecuente

    Registro:
    26 Jul 2011
    Mensajes:
    224
    Likes:
    46
    Los vectores son objetos cuyo tamaño, es decir, el espacio de memoria ocupado, queda definido en tiempo de compilación, esto es, antes que el programa sea ejecutado. Esto quiere decir que para crear vectores, debe conocerse con antelación su tamaño y no se podrá modificar durante la ejecución. Estos objetos son creados en una zona de memoria llamada memoria estática, conocida normalmente como Stack o Pila. El acceso a este tipo de objeto, es extremadamente veloz, debido a que las posiciones contiguas de elementos se encuentran en celdas contiguas de memoria de tal manera que cuando se quiere acceder a sus elementos de manera secuencial (lo que comunmente se hace) no llevará mucho trabajo a la cpu para ubicar los elementos ya que estos se encontrarán en celdas contiguas de memoria. Por otro lado tenemos los objetos dinámicos que pueden crecer a voluntad durante la ejecución, estos se utilizan cuando no se conoce el número de elementos antes de ejecutar el programa. Su almacenamiento tiene lugar en una zona de memoria llamada memoria dinámica conocida comunmente como Heap o Montón. Los elementos de un objeto no necesariamente estarán en posiciones contiguas de memoria lo que conlleva a un acceso más lento debido al trabajo extra de la cpu para ubicar los elementos. Esto no quiere decir que no se deban utilizar más por el contrario, son lo más usados, pero es necesario que conozcas las diferencias entre ambas estructuras de datos. Algo muy importante además, las variables almacenadas en la memoria estática, se pierden o eliminan cuando se ha salido de su ámbito, por el contrario, las variables de la zona dinámica permanecen hasta que el Garbage Collector las destruya.

    Saludos.
     
    Última edición: 14 Ago 2013
  5. tenguman

    tenguman Miembro de plata

    Registro:
    15 Nov 2010
    Mensajes:
    3,142
    Likes:
    1,016
    [​IMG]

    Los objetos instanciados (como las instancias de Vectores y ArrayList) SE GUARDAN EN MEMORIA RAM, solo los archivos se guardan en disco duro!!!

    Los vectores tienen un tamaño definido debido a que necesitan desde el inicio establecer que tamaño de memoria reservaran para sus datos (no necesariamente siendo contiguos), en cambio los ArrayList obtendrán el espacio de memoria cuando se inserte un objeto hacia estos, comunmente creando un objeto clon del que se adjunta, y enlazando el mismo hacia el objeto ArrayList.

    Los vectores, al igual que los ArrayList, se deben de acceder secuencialmente, en cambio los objetos de la interface Map pueden accederse directamente mediante una clave identificadora, no siendo necesario recorrerlos secuencialmente.
     
    Última edición: 14 Ago 2013
  6. eduar2083

    eduar2083 Miembro frecuente

    Registro:
    26 Jul 2011
    Mensajes:
    224
    Likes:
    46
    Sì, sorry, no sé en qué estuve pensando mientras escribía, pero lo edité antes de tu respuesta. Me disculpo por la metida de pata.

    Saludos.
     
  7. eduar2083

    eduar2083 Miembro frecuente

    Registro:
    26 Jul 2011
    Mensajes:
    224
    Likes:
    46
    A ver, me confundí al mencionar al disco duro y al acceso a este para procesar Arreglos o Listas Dinámicas cuando en realidad estas estructuras se almacenan en la RAM, ahí tuve un lapsus que tuve que corregir de inmediato cuando volví a leer lo que había publicado. Sin embargo, insisto en que los arreglos almacenan sus datos en posiciones contiguas de memoria. No me estoy refiriendo a que cuando se quiere almacenar una secuencia de datos en un arreglo estos necesariamente deben estar en posiciones contiguas del arreglo, los datos pueden ubicarse en cualquier posición del arreglo siempre y cuando no exceda de sus límites. Pero a lo que me refiero es a las posiciones de cada elemento del arreglo en la memoria RAM, estas posiciones necesariamente deben ser contiguas.
    Por ejemplo, supongamos que tenemos el siguiente arreglo de enteros:

    int[] arr = new int[] {1, 2, 3, 4, 5};

    Y que la primera posición del arreglo estuviera dada por la dirección: 22FEF8, entonces las posiciones del arreglo estarían definidas de la siguiente manera:
    arr[0] => 22FEF8
    arr[1] => 22FEFC
    arr[2] => 22FE00
    arr[3] => 22FE04
    arr[4] => 22FE08

    Cada posición separada de la otra por 4 bytes (pára el tipo int del ejemplo). Cuando el compilador toma memoria de la pila, toma una secuencia de bytes contiguos, tanto para tipos primitivos como para los arreglos estáticos, esto es así porque de lo contrario no podría accederse a los arreglos de manera secuencial dado que cada posición no mantiene una referencia a su siguiente elemento como en el caso de las listas dinámicas que sí lo hacen.
    Saludos.
     
  8. tenguman

    tenguman Miembro de plata

    Registro:
    15 Nov 2010
    Mensajes:
    3,142
    Likes:
    1,016
    Recuerda recuerda, eso se puede hacer en C++, debido a que puedes manejar con punteros las direcciones de memoria, pero en Java, la maquina virtual deja el control de la memoria al SO para hacerlo mas flexible... en Java no se puede acceder para nada a la memoria, a no ser que sea para reservarla, pero las direcciones que se reservan dependen del SO.

    http://jpascu.blogspot.com/2013/01/la-memoria-en-java.html
     
    Última edición: 15 Ago 2013
  9. situation

    situation Suspendido

    Registro:
    4 Jul 2011
    Mensajes:
    318
    Likes:
    8
    Cómo o de dónde han aprendido todo lo que dicen?? osea como trabaja la memoria con java y todo lo que estan diciendo. No me digan que en "Google" , a lo que me refiero que tutoriales han seguido, de que página web, etc.

    yo estoy siguiendo a un usuario de Youtube.. el cual es "ChelinTutorials".. a mi parecer es bueno y si lo entiendo.