У меня проблема с ArrayList как значением Hashtable - PullRequest
1 голос
/ 20 июня 2019

Я создал эти две структуры данных

private Vector<Hapsira> places;
private Hashtable<Klienti,ArrayList<Hapsira>> booking;

public void addPlace(Place h) throws RezervimiException{
    if(h == null){
        throw new RezervimiException("null");
    }

    for(int i=0;i<places.size();i++){
        if(places.get(i).equals(h)){
            throw new RezervimiException("exits");
        }
    }

    places.add(h);

}

public boolean hasBooking(){
    return places.size() > 0;
}

public Hapsira bookPlace(Client k) throws RezervimiException{
    Place h = null;

    if(hasBooking()){
        h = places.remove(0);
    }

    return h;
}

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

Но когда я добавляю места, я делаю неправильно, размер хеш-таблицы бронирования всегда равен 1

public void registerPlace(Client k,Place h) throws RezervimiException{
    ArrayList<Place> list = new ArrayList<>();

    if(booking.containsKey(k)){
        list.add(h);
    } else {
        booking.put(k, list);
    }
}

1 Ответ

0 голосов
/ 20 июня 2019

"размер хеш-таблицы бронирования всегда равен 1"

Это означает, что метод put снова и снова вводит значение, используя один и тот же ключ в вашем методе registerPlace.

2 вещи для проверки.

  1. Передаете ли вы один и тот же экземпляр Client k в вашем методе registerPlace через различные вызовы. Выведите значение k или отладьте и проверьте переменную, чтобы проверить это.

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

Вы также можете узнать больше о , используя ключи на карте здесь

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...