Pregunta

¿Cuál es la forma más sencilla de crear una tabla hash (o matriz asociativa...) en Java?Mi Google-fu ha mostrado un par de ejemplos, pero ¿existe una forma estándar de hacer esto?

¿Y hay alguna manera de completar la tabla con una lista de pares clave->valor sin llamar individualmente a un método add en el objeto para cada par?

¿Fue útil?

Solución

Map map = new HashMap();
Hashtable ht = new Hashtable();

Ambas clases se pueden encontrar en el paquete java.util.La diferencia entre los 2 se explica a continuación. Entrada de preguntas frecuentes de jGuru.

Otros consejos

Puede utilizar llaves dobles para configurar los datos.Todavía llamas a agregar o poner, pero es menos feo:

private static final Hashtable<String,Integer> MYHASH = new Hashtable<String,Integer>() {{
    put("foo",      1);
    put("bar",      256);
    put("data",     3);
    put("moredata", 27);
    put("hello",    32);
    put("world",    65536);
 }};

Además, no olvide que tanto Map como Hashtable son genéricos en Java 5 y posteriores (como en cualquier otra clase del Marco de colecciones).

Map<String, Integer> numbers = new HashMap<String, Integer>();
numbers.put("one", 1);
numbers.put("two", 2);
numbers.put("three", 3);

Integer one = numbers.get("one");
Assert.assertEquals(1, one);
import java.util.HashMap;

Map map = new HashMap();

Qué Edmundo dicho.

En cuanto a no llamar a .add todo el tiempo, no, no idiomáticamente.Habría varios trucos (almacenarlo en una matriz y luego realizar un bucle) que podrías hacer si realmente quisieras, pero no lo recomendaría.

¿Y hay alguna manera de completar la tabla con una lista de pares clave->valor sin llamar individualmente a un método add en el objeto para cada par?

Un problema con su pregunta es que, para empezar, no menciona en qué forma se encuentran sus datos.Si su lista de pares fuera una lista de objetos Map.Entry, sería bastante fácil.

Solo para descartar esto, hay una clase (muy difamada) llamada java.util.Properties que es una extensión de Hashtable.Solo espera claves y valores de cadena y le permite cargar y almacenar los datos mediante archivos o secuencias.El formato del archivo que lee y escribe es el siguiente:

key1=value1
key2=value2

No sé si esto es lo que estás buscando, pero hay situaciones en las que esto puede resultar útil.

Es importante tener en cuenta que la función hash de Java no es óptima.Si desea menos colisiones y una eliminación casi completa del re-hashing a ~50% de su capacidad, usaría un algoritmo Buz Hash Hash Buz

La razón por la que el algoritmo hash de Java es débil es más evidente en cómo procesa las cadenas.

"a".hash() darle la representación ASCII de "a" - 97, entonces "b" sería 98.El objetivo del hash es asignar un número arbitrario y "lo más aleatorio posible".

Si necesita una tabla hash rápida y sucia, utilice por supuesto java.util.Si está buscando algo sólido que sea más escalable, consideraría implementar el suyo propio.

Hashtable<Object, Double> hashTable = new Hashtable<>();

poner valores ...

obtener máximo

Optional<Double> optionalMax = hashTable.values().stream().max(Comparator.naturalOrder());

if (optionalMax.isPresent())
 System.out.println(optionalMax.get());
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top