Ver Mensaje Individual
  #23 (permalink)  
Antiguo 28/11/2017, 21:05
Avatar de detective_jd
detective_jd
 
Fecha de Ingreso: abril-2011
Ubicación: Salto
Mensajes: 437
Antigüedad: 13 años
Puntos: 6
Respuesta: TablaHash y sus pasos

Hola FuzzyLog gracias por responder, verás para que me muestre como lo hace ahora sí pero para cómo debería andar no.

En el put de MyMap.java sufrió algunos cambios como este:

Código Java:
Ver original
  1. public V put(K key, V value) {
  2.         if(key != null){
  3.             int hash = hash(key,table.length);          
  4.             for(Entry<K,V> e = table[hash]; e != null; e = e.next){
  5.                 if(e.getKey().equals(key)){
  6.                     V oldValue = e.getValue();
  7.                     e.setValue(value);
  8.                     e.recordAccess(this);
  9.                     return oldValue;
  10.                 } else {
  11.                     return e.chain(key, value);
  12.                 }                
  13.             }
  14.             this.addEntry(key, value);
  15.             return value;                    
  16.         } else {
  17.             return null;
  18.         }
  19.     }

En la clase interna Entry de MyMap.java puse la función chain quedando de esta forma:

Código Java:
Ver original
  1. V chain(K key, V value){
  2.             this.next = new Entry(key,value);
  3.             size++;
  4.             return value;
  5.         }

Cosa que en Entry de MyLinkedMap.java lo pueda redefinir de esta forma:

Código Java:
Ver original
  1. @Override
  2.         Object chain(Object key, Object value) {
  3.             this.next = new Entry(key,value);
  4.             ((MyLinkedMap.Entry)this.next).addBefore(head);            
  5.             size++;
  6.             return value;
  7.         }

pero en el método main no lista los datos por órden de inserción:

Código Java:
Ver original
  1. public static void main(String[] args) {
  2.         MySet<String>set = new MyLinkedSet();
  3.         set.add("Deborah");
  4.         set.add("Tommy");
  5.         set.add("Franco");
  6.         set.add("Manuela");
  7.         set.add("Miguel");
  8.         set.add("Denisse");
  9.         System.out.println("\t\tORDEN NORMAL");
  10.         set.stream().forEach((s) -> {
  11.             System.out.println(s);
  12.         });
  13.         System.out.println("");
  14.         MyLinkedSet<String>set2 = new MyLinkedSet();
  15.         set2.add("Franco");
  16.         set2.add("Miguel"); // -> aqui tengo los problemas
  17.         set2.add("Manuela");
  18.         set2.add("Tommy");        
  19.         set2.add("Deborah");
  20.         set2.add("Denisse");
  21.         System.out.println("\t\tORDEN NINGUNO");        
  22.         set2.stream().forEach((s) -> {
  23.             System.out.println(s);
  24.         });
  25.     }

Pero tengo problemas con las colisiones, sé que me falta algo para que me ande bien el MyLinkedMap y MyLinkedSet, el código lo puse en github y no sé me ocurre nada para arreglarlo, si ven algo avisen por favor.

https://github.com/detectivejd/Linke...kedsetsimplev1

Espero sus respuestas y saludos.