Requisito previo: HashMap y TreeMap en Java
TreeMap, HashMap y LinkedHashMap: ¿Qué es similar?
- Todos ofrecen un mapa clave->valor y una forma de iterar a través de las claves. La distinción más importante entre estas clases son las garantías de tiempo y el orden de las llaves.
- Las tres clases HashMap, TreeMap y LinkedHashMap implementan la interfaz java.util.Map y representan la asignación de clave única a valores.
Puntos clave
- HashMap: HashMap ofrece búsqueda e inserción 0(1) . Sin embargo, si itera a través de las claves, el orden de las claves es esencialmente arbitrario. Se implementa mediante una array de listas enlazadas.
Sintaxis:
public class HashMap extends AbstractMap implements Map,Cloneable, Serializable
- Un HashMap contiene valores basados en la clave.
- Contiene sólo elementos únicos.
- Puede tener una clave nula y múltiples valores nulos.
- No mantiene ningún orden .
2. LinkedHashMap: LinkedHashMap ofrece búsqueda e inserción 0(1) . Las claves están ordenadas por su orden de inserción. Se implementa mediante cubos doblemente vinculados.
Sintaxis:
public class LinkedHashMap extends HashMap implements Map
- Un LinkedHashMap contiene valores basados en la clave.
- Contiene sólo elementos únicos.
- Puede tener una clave nula y múltiples valores nulos.
- Es lo mismo que HashMap, pero mantiene el orden de inserción .
3.TreeMap: TreeMap ofrece búsqueda e inserción O(log N) . Las claves están ordenadas, por lo que si necesita iterar a través de las claves en orden, puede hacerlo. Esto significa que las claves deben implementar la interfaz Comparable. TreeMap se implementa mediante un árbol rojo-negro.
Sintaxis:
public class TreeMap extends AbstractMap implements NavigableMap, Cloneable, Serializable
- Un TreeMap contiene valores basados en la clave. Implementa la interfaz NavigableMap y extiende la clase AbstractMap.
- Contiene sólo elementos únicos.
- No puede tener una clave nula, pero puede tener varios valores nulos.
- Es lo mismo que HashMap, pero mantiene un orden ascendente (Ordenado usando el orden natural de su clave ).
4. Hashtable: «Hashtable» es el nombre genérico de los mapas basados en hash.
Sintaxis:
public class Hashtable extends Dictionary implements Map, Cloneable, Serializable
- Un Hashtable es una array de lista. Cada lista se conoce como un cubo. La posición del depósito se identifica llamando al método hashcode(). Una tabla hash contiene valores basados en la clave.
- Contiene sólo elementos únicos.
- Es posible que no tenga ninguna clave o valor nulo.
- Está sincronizado.
- Es una clase heredada.
HashMap
// Java program to print ordering // of all elements using HashMap import java.util.*; import java.lang.*; import java.io.*; class Main { // This function prints ordering of all elements static void insertAndPrint(AbstractMap<Integer, String> map) { int[] array= {1, -1, 0, 2,-2}; for (int x: array) { map.put(x, Integer.toString(x)); } for (int k: map.keySet()) { System.out.print(k + ", "); } } // Driver method to test above method public static void main (String[] args) { HashMap<Integer, String> map = new HashMap<Integer, String>(); insertAndPrint(map); } }
LinkedHashMap
// Java program to print ordering // of all elements using LinkedHashMap import java.util.*; import java.lang.*; import java.io.*; class Main { // This function prints ordering of all elements static void insertAndPrint(AbstractMap<Integer, String> map) { int[] array= {1, -1, 0, 2,-2}; for (int x: array) { map.put(x, Integer.toString(x)); } for (int k: map.keySet()) { System.out.print(k + ", "); } } // Driver method to test above method public static void main (String[] args) { LinkedHashMap<Integer, String> map = new LinkedHashMap<Integer, String>(); insertAndPrint(map); } }
TreeMap
// Java program to print ordering of // all elements using TreeMap import java.util.*; import java.lang.*; import java.io.*; class Main { // This function prints ordering of all elements static void insertAndPrint(AbstractMap<Integer, String> map) { int[] array= {1, -1, 0, 2,-2}; for (int x: array) { map.put(x, Integer.toString(x)); } for (int k: map.keySet()) { System.out.print(k + ", "); } } // Driver method to test above method public static void main (String[] args) { TreeMap<Integer, String> map = new TreeMap<Integer, String>(); insertAndPrint(map); } }
Salida de HashMap:
-1, 0, 1, -2, 2, // ordering of the keys is essentially arbitrary (any ordering)
Salida de LinkedHashMap:
1, -1, 0, 2, -2, // Keys are ordered by their insertion order
Salida de TreeMap:
-2, -1, 0, 1, 2, // Keys are in sorted order
Tabla de comparación
Aplicaciones de la vida real
- Suponga que está creando una asignación de nombres a objetos Person. Es posible que desee mostrar periódicamente a las personas en orden alfabético por nombre. Un TreeMap le permite hacer esto.
- Un TreeMap también ofrece una forma de, dado un nombre, dar salida a las próximas 10 personas. Esto podría ser útil para una función «Más» en muchas aplicaciones.
- Un LinkedHashMap es útil siempre que necesite el orden de las claves para que coincida con el orden de inserción. Esto puede ser útil en una situación de almacenamiento en caché, cuando desea eliminar el elemento más antiguo.
- Generalmente, a menos que haya una razón para no hacerlo, usaría HashMap. Es decir, si necesita recuperar las claves en orden de inserción, use LinkedHashMap. Si necesita recuperar las claves en su orden real/natural, utilice TreeMap. De lo contrario, HashMap es probablemente lo mejor. Por lo general, es más rápido y requiere menos gastos generales.
Este artículo es una contribución del Sr. Somesh Awasthi . Si te gusta GeeksforGeeks y te gustaría contribuir, también puedes escribir un artículo usando write.geeksforgeeks.org o enviar tu artículo por correo a review-team@geeksforgeeks.org. Vea su artículo que aparece en la página principal de GeeksforGeeks y ayude a otros Geeks.
Escriba comentarios si encuentra algo incorrecto o si desea compartir más información sobre el tema tratado anteriormente.
Publicación traducida automáticamente
Artículo escrito por GeeksforGeeks-1 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA