¿Por qué no puedo usar ListaEnlazada :: nueva?

apersiankite:

Digamos que tengo un HashMap como Map<Integer, List<Integer>> map = new HashMap<>();.

Ahora List<Integer> values = computeIfAbsent(key, ArrayList::new);funciona perfectamente, pero List<Integer> values = computeIfAbsent(key, LinkedList::new);arroja error de compilación.

Veo constructores sin argumentos tanto en ArrayList, así como LinkedList. Lo que me estoy perdiendo aquí, ¿Puede alguien explicar este comportamiento?

Jean-Baptiste Yunes:

La lambda necesaria debe ser de la firma Function<? super K,? extends V> mappingFunction, por lo que cuando se escribe:

List<Integer> values = map.computeIfAbsent(key, ArrayList::new);

un constructor con un argumento de un tipo compatible con el de key( Integer) debe ser dada. Hay uno para ArrayList, pero no para LinkedList:

Constructores para ArrayList:

Lista de arreglo()

ArrayList (Collection c)

ArrayList (int initialCapacity)

Constructores para LinkedList:

Lista enlazada()

LinkedList (Collection c)

Ten cuidado de que el hecho de que trabaja para ArrayListprobablemente no es un punto bueno como se construye un vacío ArrayListcon una capacidad inicial (que puede conducir a efectos de borde extraños).

Puede hacer referencia a la referencia del método en Java .

Supongo que te gusta

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