2016-01-24 3 views
-1

В документаций, тип возвращаемого значения для HashMap или Hashtable это значение само по себе следующим образом,Как работает возвращаемый тип метода put в Hashtable или HashMap?

public V put(K key, V value) 

и, он говорит о типе возвращаемого в предыдущее значение, связанное с ключом, или нулевое значение, если не было нет отображения для ключа. (Нулевой возврат может также означать, что карта ранее связанный нуль с ключом.)

Скажи, если я пишу Hashtable следующим образом,

Hashtable<Integer, Character> hash = new Hashtable<Integer, Character>(); 
    System.out.println(hash.put(12, 'c')); 

Теперь, приведенный выше код возвращает null. Я реализую Hashtable, и я немного смущен, когда возвращаю null или V, где V будет предыдущим значением, связанным с ключом. Мой код выглядит следующим образом:

// for dealing w/ the table data 
class HashEntry<K, V> { 

    private final K key; 
    private V value; 


    public HashEntry(K key, V value) { 

     this.key = key; 
     this.value = value; 
    } 

    public K getKey() { 

     return key; 
    } 

    public V getValue() { 

     return value; 
    } 

    public void setValue(V value) { 

     this.value = value; 
    } 
} 


class MyHashTable <K, V> { 


private int size; 
private int DEFAULT_CAPACITY = 16; 

private HashEntry<K, V>[] values = new HashEntry[DEFAULT_CAPACITY]; 


public V put(K key, V value) { 

    boolean insert = true; 

    for (int i = 0; i < size; i++) { 

     if (values[i].getKey().equals(key)) { 

      values[i].setValue(value); 
      insert = false; 
     } 

    } 

    if (insert) { 

     // method for check or increase capacity 
     increaseCapacity(); 
     values[size++] = new HashEntry<K, V>(key, value); 
    } 

    return null; 
    // return value; 
} 

Когда я должен возвращать значение null или значение (тип V) в реализации?

+0

Что вы не понимаете об этом? Объяснение в документации кажется простым. – user2357112

+0

Что неясно? Это поведение подробно описано подробно в тех документах, которые вы просто указали. – chrylis

+0

Я редактировал вопрос, и речь идет о реализации Hashtable. – Arefe

ответ

3

В вашем примере вы впервые назначили значение ключу 12, так как указано в нулевой документации, так как для этого ключа не было ранее сохраненного значения.

Если вы тогда сделали:

System.out.println(hash.put(12, 'd')); 

«с» будет напечатан, поскольку он возвращается как предыдущее значение для ключа 12.

Редактировать на основе дополнительной информации в вопросе:

Ниже приведена возможная реализация метода put для правильного возврата предыдущего значения.

public V put(K key, V value) { 
    boolean insert = true; 
    V prevValue = null; 

    for (int i = 0; i < size; i++) { 
     if (values[i].getKey().equals(key)) { 
      prevValue = values[i].getValue(); 
      values[i].setValue(value); 
      insert = false; 
     } 
    } 

    if (insert) { 
     // method for check or increase capacity 
     increaseCapacity(); 
     values[size++] = new HashEntry<K, V>(key, value); 
    } 

    return prevValue; 
} 
+0

Эй, спасибо за ответ, я это понимаю. Если какое-либо значение, ранее связанное с этим ключом, будет возвращено. – Arefe

+0

В этом случае сделайте отметку в качестве решения :) – aliasm2k

+0

Да, это произошло сейчас, вы знаете, что есть продолжительность времени, и вы можете принять ответ только после этого. – Arefe

Смежные вопросы