Código de comprobación aleatoria de ArrayList que contiene como elemento

Bufón :

Podemos encontrar la hashcodede una listque contiene a sí misma como element?

Sé que esto es una mala práctica, pero esto es lo preguntó el entrevistador.

Cuando me encontré con el siguiente código que lanza un StackOverflowError:

public class Main {
    public static void main(String args[]) {
        ArrayList<ArrayList> a = new ArrayList();
        a.add(a);
        a.hashCode();
    }
}

Ahora, aquí tengo dos preguntas:

  1. ¿Por qué hay una StackOverflowError?
  2. ¿Es posible encontrar el código hash de esta manera?
Holger:

El código hash para que cumplan Listlas implementaciones se ha especificado en la interfaz :

Devuelve el valor de código hash de esta lista. El código hash de una lista se define como el resultado del siguiente cálculo:

 int hashCode = 1;
 for (E e : list)
     hashCode = 31*hashCode + (e==null ? 0 : e.hashCode());

Esto asegura que list1.equals(list2)implica que list1.hashCode()==list2.hashCode()para cualquier par de listas, list1y list2, como es requerido por el contrato general de Object.hashCode().

Esto no requiere que la aplicación se ve exactamente igual que (ver cómo calcular el código hash de una corriente de la misma manera como List.hashCode () de una alternativa), pero el código hash correcto para una lista única que contiene en sí sería ser un número para el cual x == 31 + xdebe ser true, en otras palabras, es imposible calcular un número conforme.

Supongo que te gusta

Origin http://10.200.1.11:23101/article/api/json?id=422866&siteId=1
Recomendado
Clasificación