2012-08-02 10 views
5

Hola estoy haciendo una tienda para los detalles del estudiante y quería algunas opiniones sobre qué colección usar. La tienda tendrá detalles tales como nombre, número, dirección y correo electrónico. La tienda se imprimirá en un archivo de texto donde puedo cargar, guardar, editar y eliminar los detalles en el archivo de texto. Nunca he hecho esto antes y no, si hay restricciones para presentar I/O al usar colecciones. Así que realmente agradecería los comentarios. Gracias por adelantado.¿La mejor colección para guardar los detalles del estudiante?

Respuesta

4

Si estuviera en su lugar,

entonces habría creado una clase frijol dicen Student y para colecciónArrayList<Student> student = new ArrayList<Student>(); y como ArrayList es serializado así que ningún problema para la escritura de disco y una class para todos IOoperaciones.

Para clasificaciónArrayList por propiedad de objetolook

+0

Solo has visto tu publicación ahora hombre. ¿Se puede ordenar una lista de arreglos por nombre? no se pregunta en el resumen, pero creo que podría ser una ventaja tener un archivo de texto ordenado. – Pendo826

+1

@ Pendo826 aquí http://stackoverflow.com/questions/2784514/sort-arraylist-of-custom-objects-by-property –

+0

muy buen ejemplo. :) – Pendo826

3

A menos que se requieran algunas capacidades especiales de "ubicación rápida", como buscar por apellido o por ID de estudiante, una lista sería una colección apropiada para usar.

List<Student> students = new ArrayList<Student>(); 

Si necesitas organizar sus estudiantes por algún atributo, por ejemplo, mediante identificación de estudiante, considere el uso de LinkedHashMap:

Map<String,Student> studentById = new LinkedHashMap<String,Student>(); 

LinkedHashMap le da un orden predecible de iteración. Puede usar un HashMap<K,V> normal, pero el orden de iteración será arbitrario. Finalmente, podría usar un TreeMap<K,V>, que basaría el orden de iteración en el orden de las claves.

+0

creo que esto causará un problema grave en el caso mapa si no anula correctamente iguales/código hash. – Woot4Moo

+0

@ Woot4Moo Esto es correcto, si el OP usa su propia clase para claves, necesitaría tratar con equals/hashCode. Es por eso que sugerí usar 'String's, que son excelentes claves hash. – dasblinkenlight

+0

Bueno, son excelentes teclas en la medida en que el hash está garantizado. http://www.infoq.com/presentations/effective-api-design/ para ver la opinión de Josh Bloch sobre Strings as Keys. Es bastante informativo para crear API – Woot4Moo

1

Bueno, si tiene que ser serializable, es decir, que puede escribirlo en el disco, puede usar List. Ahora, antes de que alguien grite, no puede serializar un List que sea correcto, pero tampoco puede crear una instancia de List. Como sabemos que todas las subclases conocidas de List son serializables, puede emitir de forma segura. En términos de cómo almacenar los datos List<Student> debería estar bien.

EDITAR

Parece haber cierta confusión aquí. En los lenguajes orientados a objetos, sabemos que la relación is-a es verdadera para los objetos especificados en una jerarquía. Entonces, en la API de Java tenemos una interfaz llamada List, esta interfaz tiene clases que la implementan, por ejemplo, ArrayList. Esto pone ArrayList en la jerarquía de List. Desde ArrayList implementa Serializable y sabemos que no puede instanciar un objeto marcado con la interfaz de palabra clave (en Java). Podemos usar el casting al Serialize cualquier implementación conocida de List. La razón por la cual esto funcionará es que la implementación (es decir, el objeto concreto) que se transmite está garantizada para ser serializable.

+0

bien, así que no puedes serializar una lista. Entonces, ¿tendré problemas para guardar y cargar la tienda si uso una lista? – Pendo826

+1

@ Pendo826 no. Ni siquiera puede crear una 'Lista', puede crear una 'Lista de Arreglos' que implemente Serializable (por defecto en la API) que' es-una'' Lista'. Esto es tarea, así que no voy a dar una implementación directa. Pero esta es una de las piedras angulares de Object Oriented Languages. – Woot4Moo

0

En el caso más simple, un java.util.List hará exactamente lo que quiera. Sin embargo, si desea poder encontrar entradas en la colección rápidamente (para respaldar sus requisitos de actualización), también debería consultar java.util.Map. El mapa le permite navegar rápidamente a un registro en particular sin tener que iterar sobre la colección completa, mientras que con una Lista deberá mirar a cada alumno de la colección hasta encontrar el que le interese.

+0

A menos que se hayan ordenado. – Daniel

Cuestiones relacionadas