/** * Agrega un nuevo valor al diccionario, usando la llave proporcionada. Si la llave ya había sido * utilizada antes para agregar un valor, el diccionario reemplaza ese valor con el recibido aquí. * * @param llave la llave para agregar el valor. * @param v el valor a agregar. */ public void agrega(K llave, V v) { int i = indice(llave); // System.out.println("LLave: "+llave+" I: "+i); Lista<Entrada<K, V>> l = getLista(i, true); Entrada<K, V> e = buscaEntrada(llave, l); if (e != null) e.valor = v; else { e = new Entrada<K, V>(llave, v); l.agregaFinal(e); total++; } if (this.carga() >= MAXIMA_CARGA) creceArreglo(); }
private void creceArreglo() { Lista<Entrada<K, V>>[] a = entradas; entradas = nuevoArreglo(entradas.length * 2); mascara++; for (Lista<Entrada<K, V>> e : a) { if (e == null) continue; for (Entrada<K, V> ent : e) { int i = indice(ent.key); Lista<Entrada<K, V>> l = getLista(i, true); Entrada<K, V> ex = buscaEntrada(ent.key, l); if (ex != null) ex.valor = ent.valor; else l.agregaFinal(ent); } } }