Мне нужно реализовать метод, где я могу получить ключ от значения и метод удаления - PullRequest
0 голосов
/ 01 ноября 2019

У меня есть класс MapEntry для реализации Hashmap. Мне нужно реализовать метод, где я могу получить ключ от значения и метод удаления. Я знаю, что HashMap не реализует такой метод, как getValue, но мой проф попросил это сделать. Я новичок в программировании, как это немного сложно для меня сейчас. Я буду признателен за любую помощь.

   public class MapEntry<K,V> {

   MapEntry<K,V> next;

    K key;

    V value;

    public MapEntry(K key, V value) {
         this.setKey(key);
         this.setValue(value);
    }
    public void setKey( K key){
        this.key=key;
    }
    public void setValue(V value){
        this.value=value;
    }
    public K getKey(){
        return key;
    }
    public V getValue(){
        return value;
    }
    public void setNext(MapEntry<K,V> next) {
        this.next = next;
    }

    public MapEntry<K, V> getNext() {
        return next;
    }
}
public class HashMap{

    private int DEFAULT_CAPACITY = 10;
    private MapEntry<String,Double>[] Hash;
    private int size;

    public HashMap() {
        Hash = new MapEntry[DEFAULT_CAPACITY];
    }

    public boolean isEmpty(){
        if(size!= 0){
            return false;
        }
        else{
            return true;
        }
    }



    public int getHashCode(String key){
        int bucketIndex = key.hashCode()%Hash.length;
        return bucketIndex;
    }

    public Double get(String key){
        if(key == null){
            try {
                throw new IllegalAccessException("Null key");
            } catch (IllegalAccessException e) {
                e.printStackTrace();
            }
        }


        MapEntry<String,Double> entry = Hash[getHashCode(key)];




        while (entry != null && !key.equals(entry.getKey()))
            entry = entry.getNext();
        if(entry != null)
            return entry.getValue();
        else
            return null;

   }
    }
    public void put(String key, double value){
        int keyBucket =hash(key);
        MapEntry<String,Double> temp = Hash[keyBucket];
        while (temp !=null){
            if((temp.key == null && key == null)
                || (temp.key != null && temp.key.equals(key))){
                temp.value = value;
                return;
            }
            temp = temp.next;
        }
        Hash[keyBucket] = new MapEntry<String, Double>(key,value);
        size++;
    }
    public void delete (String key) throws IllegalAccessException {
        if(key == null){
            throw new IllegalAccessException("Null key");
        }
    }


    private int hash(String key){
        if(key == null){
            return 0;
        }else {
            return Math.abs(key.hashCode()% this.Hash.length);
        }
    }

   public static void main(String[] args) {
 HashMap hashMap = new HashMap();
 hashMap.put("value", 2.2);
 hashMap.put("bob", 2.3);
     System.out.println(hashMap.get("value"));
     System.out.println(hashMap.get("bob"));
     System.out.println(hashMap.size);
     System.out.println(hashMap.getHashCode("value"));
     System.out.println(hashMap.getHashCode("bob"));
     System.out.println(hashMap.isEmpty());






    }
}

1 Ответ

1 голос
/ 01 ноября 2019

Я думаю, что основной алгоритм будет:

  • Перебирать все значения одно за другим
  • Если ваше значение соответствует желаемому результату, извлеките ключ из этой записи.
  • Чтобы удалить эту запись, просто удалите эту запись

Примечание: не работает должным образом, если у вас есть несколько записей с одинаковым значением.

...