Buenas a todos, acá ando con lo siguiente: decidí cambiar un poco a MyLinkedMap y tuve que adaptar el código de MyMap, pero tengo este pequeño problema en la consola:
run:
--TEST NORMAL--
tamaño -> 4
--valores--
Deborah
Tomás
Franco
Deborah
Tomás
Franco
Manuela
--claves--
1
2
3
1
2
3
4
--entradas--
clave -> 1 valor -> Deborah
clave -> 2 valor -> Tomás
clave -> 3 valor -> Franco
clave -> 1 valor -> Deborah
clave -> 2 valor -> Tomás
clave -> 3 valor -> Franco
clave -> 4 valor -> Manuela
Lo raro es que tendría que aparecerme las entradas 1,2,3 y 4 y no repetidos, acá pongo el código cambiado de MyLinkedMap:
Código Java:
Ver original@Override
protected void createEntry(K key, V value) {
int hash = hash(key,table.length);
Entry<K,V> e = new Entry(key, value);
table[hash] = e;
e.addBefore(head);
size++;
}
class Entry<K,V> extends MyMap.Entry {
Entry<K,V> before, after;
public Entry(K xkey, V xvalue) {
super(xkey, xvalue);
}
private void addBefore(Entry<K,V> existingEntry) {
after = existingEntry;
before = existingEntry.before;
before.after = this;
after.before = this;
}
@Override
void recordAccess(MyMap m) {
MyLinkedMap<K,V> lm = (MyLinkedMap<K,V>)m;
if (lm.accessOrder) {
remove();
addBefore((Entry<K, V>) lm.head);
}
}
@Override
void recordRemoval(MyMap m) {
remove();
}
private void remove() {
before.after = after;
after.before = before;
}
}
Porque en MyMap tuve que adaptar el put, además de agregar el init al constructor para inicializar la cabecera en el Linked:
Código Java:
Ver original@Override
public V put(K key, V value) {
if(key != null){
int hash = hash(key,table.length);
for(Entry<K,V> e = table[hash]; e != null; e = e.next){
if(e.getKey().equals(key)){
V oldValue = e.getValue();
e.setValue(value);
e.recordAccess(this);
return oldValue;
} else if(e.next == null){
e.next = new Entry(key,value);
e.recordAccess(this);
size++;
return value;
}
}
this.addEntry(key, value);
return value;
} else {
return null;
}
}
Me gustaría arreglar esto pero no sé me ocurre nada, espero sus respuestas y saludos.