es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Añadiendo a un ArrayList doble dentro de un HashMap.

Estoy tratando de agregar pares que sumen un cierto número en Java y una de las formas en que estoy intentando hacer esto es creando un ArrayList doble dentro de mi HashMap. Si agrego 1 y 2 a mi lista, obtendré 3 como mi clave. Por ejemplo:

HashMap<integer,></integer,><><integer>>> map = new HashMap<>();
ArrayList<integer> list = new ArrayList<>();
list.add(1);
list.add(2);
map.put(list.get(0) + list.get(1), new ArrayList<>(list));

La salida se vería así:

Key: 3 Value: [[1,2]]

Si agregara otro par:

Key: 3 Value: [[1,2],[0,3]]

pero sigo obteniendo el error ‘method is not applicable in the type HashMap<><>>>’ no es aplicable para los argumentos (int, new ArrayList<>(list)).

También he intentado:

new ArrayList<>(new ArrayList<>(list))

pensando que quizás necesito inicializar la matriz más grande primero, pero desafortunadamente obtengo el mismo error.

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Parece que estás tratando de almacenar pares de enteros en un ArrayList dentro de un HashMap, donde la clave es la suma de los enteros en el par.

    El error que estás recibiendo parece estar relacionado con la sintaxis que estás utilizando para añadir el nuevo ArrayList a tu HashMap. Una posible solución podría ser crear un ArrayList separado para cada par de enteros, y luego añadir ese ArrayList al ArrayList existente correspondiente a la clave. Aquí tienes un ejemplo:

    HashMap<integer,></integer,><><integer>>> mapa = new HashMap<>();
    ArrayList<integer> par1 = new ArrayList<>();
    par1.add(1);
    par1.add(2);
    mapa.put(par1.get(0) + par1.get(1), new ArrayList<>(Arrays.asList(par1)));
    
    ArrayList<integer> par2 = new ArrayList<>();
    par2.add(0);
    par2.add(3);
    int clave = par2.get(0) + par2.get(1);
    if(mapa.containsKey(clave)) {
        mapa.get(clave).add(par2);
    } else {
        mapa.put(clave, new ArrayList<>(Arrays.asList(par2)));
    }
    
    System.out.println(mapa);
    

    Esto debería mostrar:

    {3=[[1, 2], [0, 3]]}
    

    Aquí, primero añadimos el par inicial (1,2) al mapa. Luego, cuando queremos añadir el segundo par (0,3), comprobamos si la clave ya existe en el mapa y añadimos el nuevo par al ArrayList existente si es así. De lo contrario, creamos un nuevo ArrayList para la clave y añadimos el nuevo par a él.

    Ten en cuenta que también podrías utilizar un HashSet u otra estructura de datos para almacenar los pares y comprobar duplicados o colisiones. Además, si necesitas encontrar todos los pares que sumen un número determinado, existen otros algoritmos y técnicas que podrías utilizar (como ordenar el array, utilizar un enfoque de dos punteros, etc.).

Comments are closed.