Les cuento solucioné mi problema con lo de los índices, arreglando mi problema de esta forma:
crear una función para obtener el indice vacio para almacenar en el put
Código Java:
Ver originalprivate int indexPut() {
for(int i= 0 ; i < table.length; i++){
if(table[i] == null){
return i;
}
}
return -1;
}
Y para cuando quiero filtrar mi map para el get, containsKey y remove, hago otra función pasándole cómo parámetro la clave:
Código Java:
Ver originalprivate int getIndex
(Object key
) { for(int i= 0 ; i < table.length; i++){
if(table[i] != null && table[i].getKey() == key){
return i;
}
}
return -1;
}
Aunque eso me hizo unos cuantos cambios, pero la estructura ya está en su 95% de funcionamiento salvo que no me anda el putAll:
Código Java:
Ver original@Override
public V put(K key, V value) {
if(key == null){
return null;
} else {
int index = indexPut();
Entry<K, V> pair = table[index];
if(size == table.length){
table
= Arrays.
copyOf(table, table.
length +1); }
if (pair != null && pair.getKey().equals(key)) {
V oldValue = pair.getValue();
pair.setValue(value);
return oldValue;
}
table[index] = new Entry(key, value);
size++;
return value;
}
}
@Override
public void putAll(Map<? extends K, ? extends V> m) {
if(m.size() > 0){
m.entrySet().forEach((e) -> {
this.put(e.getKey(), e.getValue());
});
}
}
El problema se debe a que le pongo al inicializar un tamaño de 4 para probar si aumenta el almacenamiento del map en la función put pero no funciona.
Este error me da:
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: -1
at hashmapsimple.MyMap.put(MyMap.java:38)
at hashmapsimple.MyMap.lambda$putAll$0(MyMap.java:135 )
at java.util.HashMap$EntrySet.forEach(HashMap.java:10 43)
at hashmapsimple.MyMap.putAll(MyMap.java:134)
at hashmapsimple.Cuerpo.main(Cuerpo.java:15)
/home/detectivejd/.cache/netbeans/8.2/executor-snippets/run.xml:53: Java returned: 1
BUILD FAILED (total time: 0 seconds)
Espero sus respuestas y Saludos.