Cómo reducir un Map en Java después de borrar uno de sus elementos (objetos)?
Supongamos que se me da un mapa representado como {[A, 0], [B, 1] [C, 2], [D, 3], [E, 4], [F, 5], [G, 6]} y se elimina uno de sus elementos, es decir [E, 4], entonces mi nuevo mapa se convertiría en {[A, 0], [B, 1] [C, 2], [D, 3], [F, 5], [G, 6]}. ¿Cómo puedo redimensionar o reducir este mapa para que los elementos cuyo índice es mayor que el índice del elemento eliminado, disminuyan su índice (Valor) en uno, como esto {[A, 0], [B, 1] [C, 2], [D, 3], [F, 4], [G, 5]}? Además de esto, ¿cómo puedo ajustar el tamaño de la matriz ArrayList<ArrayList<GraphEdge<L>>>
?
Nota: La asignación del índice a los nodos debe seguir el orden de inserción, por lo tanto, el primer nodo insertado en el grafo debe tener asignado el índice 0, el segundo el índice 1 y así sucesivamente.
El código Java:
@Override
public void removeNode(GraphNode<L> node) {
if (node == null) {
throw new NullPointerException();
}
if (!this.nodesIndex.containsKey(node)) {
throw new IllegalArgumentException();
}
// Implementar aquí
}
@Override
public boolean addNode(GraphNode<L> node) {
if (node == null) {
throw new NullPointerException();
}
if (this.nodesIndex.containsKey(node)) {
return false;
}
// Implementar aquí
}
El mapa que contiene sus elementos (Keys) asociados a sus índices (Values) se representa de la siguiente manera:
/*
* Un conjunto de nodos en el que cada nodo está asociado a su índice en la matriz de adyacencia
*/
protected Map<GraphNode<L>, Integer> nodesIndex = new HashMap<GraphNode<L>, Integer>();
Mientras que la matriz se representa de la siguiente manera:
/*
* La matriz de adyacencia en la que sus elementos son nulos u objetos de la clase GraphEdge<L>. El uso de ArrayList permite que la matriz se redimensione gradualmente cada vez que se agrega o elimina un nuevo objeto (elemento).
*/
protected ArrayList<ArrayList<GraphEdge<L>>> matrix = new ArrayList<ArrayList<GraphEdge<L>>>();
davy.ai
Para redimensionar o reducir el mapa después de eliminar un elemento, puedes iterar a través de los elementos restantes en el mapa y decrementar su índice (valor) si es mayor que el índice del elemento eliminado. Aquí hay una implementación del método
removeNode
para lograr esto:Para ajustar el tamaño de la matriz
ArrayList<><><l>>>
, puedes usar el mismo enfoque que para el mapa. Después de eliminar un nodo, debes eliminar la fila y la columna correspondiente a su índice en la matriz. Aquí hay una implementación del métodoremoveNode
que también redimensiona la matriz:Nota que ambas implementaciones asumen que el mapa
nodesIndex
y el ArrayListmatrix
han sido configurados y actualizados correctamente antes de llamar al métodoremoveNode
.