Sure. Cualquier estructura de datos puede ser hash. Solo necesita obtener una definición estricta de igualdad y luego asegurarse de que hash (A) == hash (B) si A == B. Suponga que su definición es que [s1, s2, ..., sm] == [t1, t2, ..., tn] si y solo si m == ny si == ti para i = 1..m y cadena adicional s == t si y solo si | s | == | t | y s [i] == t [i] para 0 < = i < | s |. Puede construir un hash de muchas maneras:
- Concatenar todas las cadenas en la lista y calcular el resultado con cualquier función de cadena de hash.
- Haz lo mismo, agregando separadores como comas (,)
- Hash cada cadena individualmente y xor los resultados.
- Hash eash cadena individualmente, cambie el valor hash anterior y xor el nuevo valor en el hash.
- Infinitamente muchas más posibilidades ...
definición Tigorous de la igualdad es importante. Si, por ejemplo, el orden no tiene importancia en las listas o la comparación de cadenas no distingue entre mayúsculas y minúsculas, la función hash aún debe diseñarse para garantizar hash (A) == hash (B) si A == B. Hacer esto mal hará que las búsquedas fallen.
Java es un lenguaje que le permite definir una función hash para cualquier tipo de datos. Y, de hecho, una lista de cadenas de bibliotecas funcionará muy bien como una clave que usa la función de hash predeterminada.
HashMap<ArrayList<String>, String> map = new HashMap<ArrayList<String>, String>();
ArrayList<String> key = new ArrayList<String>();
key.add("Hello");
key.add("World");
map.put(key, "It's me.");
// map now contains mapping ["Hello", "World"] -> "It's me."
se podría concatenar los elementos de la lista y utilizar la función basada en la cadena de – Eduardo
Sí, pero no es aconsejable, ya que las matrices son claves mutables y mutables en hashes/dicts/mapas pueden causar errores de ejecución extraños. –
@AbhinavSarkar No creo que el problema sea la mutabilidad. En Java, siempre que pueda implementar hashCode e igualar su objeto, debe ser clave. Por lo tanto, podría utilizar ArrayList como clave, siempre que su hashCode/equals le garantice los resultados que espera. – gebuh