INTERFACES SET Y SORTEDSET DEL API DE JAVA. CLASES HASHSET Y TREESET. EJEMPLO. DIFERENCIAS ENTRE ELLAS. (CU00921C)

Interfaces Set y SortedSet api java. Clases HashSet y TreeSet. APRENDERAPROGRAMAR.COM INTERFACES SET Y SORTEDSET DEL API DE JAVA. CLASES HASHSET Y TREESET. EJEMPLO. DIFERENCIAS ENTRE ELLAS. (CU00921C) Sección: Cursos Categoría: Lenguaje de programación Java nivel avanzado I Fecha revisión: 2029 Resumen: Entrega nº21 curso “Lenguaje de programación Java Nivel Avanzado I”. © aprenderaprogramar.com, 2006-2029 Autor: Manuel Sierra Interfaces Set y SortedSet api java. Clases HashSet y TreeSet. INTERFACES SET Y SORTEDSET Vamos a estudiar dos interfaces del paquete java.util del api de java que son muy usadas. Se trata de las interfaces SET y SORTEDSET. Estas interfaces tratan respectivamente lo que se conoce como un conjunto de elementos (SET) y un conjunto de elementos ordenados (SORTEDSET). Debido a su similitud hemos decidido comentarlas conjuntamente en lugar de por separado. SET La interface SET como hemos comentado es la encargada del tratamiento de conjuntos en el api de Java. Un conjunto en Java es una colección de elementos que, como el conjunto en matemáticas, no permite elementos duplicados dentro de ella y no tiene orden entre sus elementos. Más formalmente, no permite elementos e1, e2 tales que: e1.equals(e2) sea true. Además nos obliga a implementar determinados métodos, por ejemplo el método hashCode() entre otros. SORTEDSET Esta interfaz es muy similar a la interface SET. Tan solo se diferencia en que SORTEDSET permite que los elementos dentro del conjunto de la colección estén ordenados totalmente, facilitando por tanto su acceso en búsquedas y haciendo más rápido su consulta. Los elementos son ordenados usando su orden natural, o bien usando un Comparator. El concepto de orden natural y Comparator los hemos estudiado en apartados anteriores del curso. HASHSET HashSet es la clase que vamos a utilizar para implementar la interfaz SET ya que es quizás la más usada para implementar esta interface. Esta clase implementa la interface SET basada en una tabla hash (a modo resumen para nosotros una tabla hash será una tabla que se construye en base a claves que permiten localizar objetos. Por ejemplo un DNI podría ser la clave para localizar a una persona. En esta clase la clave da la posición del objeto en la tabla, permitiendo un acceso directo al elemento. Este acceso directo hace que esta clase sea ideal para búsqueda, inserción y borrado de elementos en base a una clave o llave. No hay garantía de orden (por ejemplo si hacemos un recorrido de los objetos dentro de un HashSet no siempre los obtendremos en igual orden) y se permite el uso de elementos nulos. © aprenderaprogramar.com, 2006-2029 Interfaces Set y SortedSet api java. Clases HashSet y TreeSet. TREESET TreeSet es la clase que vamos a utilizar como implementación de la interface SORTEDSET. Esta implementación está basada en el uso de una estructura de árbol permitiendo que los elementos estén ordenados bien por orden natural o bien por orden total definido por un Comparator y por tanto haciendo muy rápido las búsquedas, inserciones y borrados de sus elementos. A efectos prácticos, la diferencia principal de esta clase con HashSet es que sus elementos están ordenados. Otra diferencia es la estructura de datos que sirve para almacenar datos, en un caso una tabla y en otro un árbol. EJEMPLO DE USO DE SET Y SORTEDSET A continuación vamos a crear una clase Persona a partir de la cual vamos a definir un conjunto (set) de personas y otro conjunto ordenado (sortedset) también de personas en nuestro programa principal. Añadiremos las mismas personas al conjunto y al conjunto ordenado, imprimiendo al final todas las personas que tienen ambos conjuntos. Comenzaremos escribiendo el siguiente código de la clase Persona en nuestro editor: /* Ejemplo Interface Set y SortedSet, clase HashSet y TreeSet aprenderaprogramar.com */ import java.util.Objects; public class Persona implements Comparable{ public int idPersona; public String nombre; public int altura; public Persona(int idPersona, String nombre, int altura) { this.idPersona = idPersona; this.nombre = nombre; this.altura = altura;} @Override public String toString() { return "Persona-> ID: "+idPersona+" Nombre: "+nombre+" Altura: "+altura+"\n"; } @Override public int compareTo(Persona

2 downloads 23 Views 71KB Size

Recommend Stories


LA ESTRUCTURA DE DATOS PILA EN JAVA. CLASE STACK DEL API JAVA. EJEMPLO Y EJERCICIOS RESUELTOS. (CU00923C)
Interface List del api java. Clase Stack. Ejemplos resueltos. APRENDERAPROGRAMAR.COM LA ESTRUCTURA DE DATOS PILA EN JAVA. CLASE STACK DEL API JAVA.

Tema 12: Interfaces y Clases internas
Tema 12: Interfaces y Clases internas 0 Modificador abstract z Indica que debe ampliarse un método (sólo está indicado el comportamiento) o que u

Modulo 11. Clases y Objetos en Java
El siguiente texto es una traducción no oficial del documento publicado por el grupo JEDI, “Introduction to Programming 1”, no pretende en ningún mome

DIFERENCIAS ENTRE JAVASCRIPT Y JAVA, HTML, CSS, PHP, ETC. FRONTERA ENTRE LENGUAJES EN DESARROLLOS WEB (CU01105E)
Diferencias entre JavaScript, Java, HTML, CSS, PHP, etc. APRENDERAPROGRAMAR.COM DIFERENCIAS ENTRE JAVASCRIPT Y JAVA, HTML, CSS, PHP, ETC. FRONTERA E

SOLUCIONES CLASES JAVA
SOLUCIONES CLASES JAVA 55- Teniendo en cuenta las diferencias entre un lenguaje y otro, se pide adaptar el programa creado en C# del ejercicio 50 al

Story Transcript

Interfaces Set y SortedSet api java. Clases HashSet y TreeSet.

APRENDERAPROGRAMAR.COM

INTERFACES SET Y SORTEDSET DEL API DE JAVA. CLASES HASHSET Y TREESET. EJEMPLO. DIFERENCIAS ENTRE ELLAS. (CU00921C)

Sección: Cursos Categoría: Lenguaje de programación Java nivel avanzado I Fecha revisión: 2029 Resumen: Entrega nº21 curso “Lenguaje de programación Java Nivel Avanzado I”.

© aprenderaprogramar.com, 2006-2029

Autor: Manuel Sierra

Interfaces Set y SortedSet api java. Clases HashSet y TreeSet.

INTERFACES SET Y SORTEDSET Vamos a estudiar dos interfaces del paquete java.util del api de java que son muy usadas. Se trata de las interfaces SET y SORTEDSET. Estas interfaces tratan respectivamente lo que se conoce como un conjunto de elementos (SET) y un conjunto de elementos ordenados (SORTEDSET). Debido a su similitud hemos decidido comentarlas conjuntamente en lugar de por separado.

SET La interface SET como hemos comentado es la encargada del tratamiento de conjuntos en el api de Java. Un conjunto en Java es una colección de elementos que, como el conjunto en matemáticas, no permite elementos duplicados dentro de ella y no tiene orden entre sus elementos. Más formalmente, no permite elementos e1, e2 tales que: e1.equals(e2) sea true. Además nos obliga a implementar determinados métodos, por ejemplo el método hashCode() entre otros.

SORTEDSET Esta interfaz es muy similar a la interface SET. Tan solo se diferencia en que SORTEDSET permite que los elementos dentro del conjunto de la colección estén ordenados totalmente, facilitando por tanto su acceso en búsquedas y haciendo más rápido su consulta. Los elementos son ordenados usando su orden natural, o bien usando un Comparator. El concepto de orden natural y Comparator los hemos estudiado en apartados anteriores del curso.

HASHSET HashSet es la clase que vamos a utilizar para implementar la interfaz SET ya que es quizás la más usada para implementar esta interface. Esta clase implementa la interface SET basada en una tabla hash (a modo resumen para nosotros una tabla hash será una tabla que se construye en base a claves que permiten localizar objetos. Por ejemplo un DNI podría ser la clave para localizar a una persona. En esta clase la clave da la posición del objeto en la tabla, permitiendo un acceso directo al elemento. Este acceso directo hace que esta clase sea ideal para búsqueda, inserción y borrado de elementos en base a una clave o llave. No hay garantía de orden (por ejemplo si hacemos un recorrido de los objetos dentro de un HashSet no siempre los obtendremos en igual orden) y se permite el uso de elementos nulos.

© aprenderaprogramar.com, 2006-2029

Interfaces Set y SortedSet api java. Clases HashSet y TreeSet.

TREESET TreeSet es la clase que vamos a utilizar como implementación de la interface SORTEDSET. Esta implementación está basada en el uso de una estructura de árbol permitiendo que los elementos estén ordenados bien por orden natural o bien por orden total definido por un Comparator y por tanto haciendo muy rápido las búsquedas, inserciones y borrados de sus elementos. A efectos prácticos, la diferencia principal de esta clase con HashSet es que sus elementos están ordenados. Otra diferencia es la estructura de datos que sirve para almacenar datos, en un caso una tabla y en otro un árbol.

EJEMPLO DE USO DE SET Y SORTEDSET A continuación vamos a crear una clase Persona a partir de la cual vamos a definir un conjunto (set) de personas y otro conjunto ordenado (sortedset) también de personas en nuestro programa principal. Añadiremos las mismas personas al conjunto y al conjunto ordenado, imprimiendo al final todas las personas que tienen ambos conjuntos. Comenzaremos escribiendo el siguiente código de la clase Persona en nuestro editor:

/* Ejemplo Interface Set y SortedSet, clase HashSet y TreeSet aprenderaprogramar.com */ import java.util.Objects; public class Persona implements Comparable{ public int idPersona; public String nombre; public int altura; public Persona(int idPersona, String nombre, int altura) { this.idPersona = idPersona; this.nombre = nombre; this.altura = altura;} @Override public String toString() { return "Persona-> ID: "+idPersona+" Nombre: "+nombre+" Altura: "+altura+"\n"; } @Override public int compareTo(Persona o) { return this.altura-o.altura; } @Override public int hashCode() { return altura + nombre.hashCode() + idPersona; } @Override public boolean equals(Object obj) { if (obj == null) { return false; } if (getClass() != obj.getClass()) { return false; } final Persona other = (Persona) obj; if (this.idPersona != other.idPersona) { return false; } if (!Objects.equals(this.nombre, other.nombre)) { return false; } if (this.altura != other.altura) { return false; } return true; } }

© aprenderaprogramar.com, 2006-2029

Interfaces Set S y SortedSet api java. Clase es HashSet y TreeSet.

En la anterior definición de claase Personaa, se puede e ver que hemos h implementado la interfaz Comparab ble y que po or tanto vamos a trabajar con el orde en natural por simplicidaad pero si qu uisiéramos podríamo os implemen ntar la inteerfaz Compaarator como o se explicó ó anteriorm mente. En el e método compareTTo hemos deefinido que una u persona “es mayor” que otra si su s altura es m mayor. Este criterio de orden lo usamos u simp plemente a modo m de ejem mplo. También podemos ver v que se han sobreescrito los métodos to oString(), haashCode() y equals(), h conssiderado neccesaria paraa el buen funcionamien f nto en las interfaces sobreescrritura que hemos correspon ndientes. En el método hashCode() hemos implementado que q se devueelva un núm mero único como clavve, no presttaremos aho ora demasiad da atención a este método. En el m método equals hemos definido un criterio de igualdad d entre personas, criterio implemeentado simp plemente a modo de ejemplo. Escribe ah hora el códiggo de nuestro o programa que q hará uso o de las clasees HashSet y TreeSet:

/* Ejem mplo Interfacee Set y SortedSet, clase HasshSet y TreeSe et aprenderap programar.com m */ importt java.util.Hash hSet; importt java.util.Set; importt java.util.SorttedSet; importt java.util.TreeeSet; ma { public class Program m (String []args) [ { public static void main Seet cjjsp = new HasshSet(); So ortedSet cjssp = new n TreeSet(); Peersona p = new w Persona(1,"Marta",165); cjssp.add(p); cjsssp.add(p); p = new Persona(2,"Elena",15 55); cjssp.add(p); cjsssp.add(p); p = new Persona(3,"María",1 170); cjssp.add(p); cjsssp.add(p); Syystem.out.prin ntln("Personass en el conjun nto: "+cjsp); Syystem.out.prin ntln("Personass en el conjun nto ordenado: "+cjssp); } }

v cómo he emos creado o nuestros conjuntos (un n set y un En la classe de nuestrro programaa podemos ver sortedset) de personaas y hemos añadido a a 3 personas (M Marta, Elena y María). El diagrama de e clases es el siguientte:

© aprenderraprogramar.co om, 2006-2029

Interfaces Set S y SortedSet api java. Clase es HashSet y TreeSet.

El resultad do de ejecucción del proggrama nos deevuelve la sigguiente salid da:

Tras obseervar la salida de nuestro programa vemos que el prim mer cojunto o mantiene los datos desordenados como era e de preveer, mientras que el conju unto ordenaado nos ha in ntroducido a todas las personas ordenadas por p su orden n natural. En este caso el orden natu ural viene dado por la alttura de las personas,, porque así lo hemos deefinido al im mplementar el e método co ompareTo. SSi hubiéramo os definido el orden natural n en base b a otro criterio c (por ejemplo ord den alfabéticco de nombrres), la clase SortedSet hubiera devuelto d a laas personas ordenadas o p este otro por o criterio. Co on el criterio o empleado la primera persona en e el conjuntto ordenado o es Elena co on una alturaa de 155 cen ntímetros, deespués Martta con 165 centímetrros y por último María co on 170 centím metros.

CONCLUSSIONES Como con nclusión de estas 2 inteerfaces y esttas 2 clases que las implementan p podemos de ecir que la interfaz Set S es más sencilla de implementaar ya que nos n evitamo os el tener que usar orrdenación, necesario o para la inteerfaz SortedSet. Sin emb bargo, tenem mos un conjunto de elem mentos de los que no tenemos garantía de orden de niingún tipo y según el caaso tendremos que valorar si esto nos n resulta nte o no. En cambio con SortedSet teenemos el orden estableecido bien po or orden natural de los convenien sin que esto elemento os contenidos o por un orden o total que q asignem mos con un Comparator, C o suponga demasiad do esfuerzo. La sobreescrritura de cierrtos métodos como hash hCode() para implementaar HashSet y compareTo() para im mplementarr TreeSet es habitual parra conseguirr que estas cclases funcio onen como nosotros queremos. Por el missmo motivo o es habituaal sobreescrribir toStringg(), ya que si no lo sobreescrribimos el ressultado obteenido con el método no es e adecuado.

e CU0 00922C Próxima entrega: Acceso al curso comp pleto en apre enderaprogrramar.com --- > Cursos, o en la direcciión siguiente e: http://apreenderaprograamar.com/index.php?option=com_conte ent&view=category&id=58& &Itemid=180

© aprenderraprogramar.co om, 2006-2029

Get in touch

Social

© Copyright 2013 - 2024 MYDOKUMENT.COM - All rights reserved.