Проблема с рейтингом еды LeetCode: изменение, внесенное одним HashMap, не воспринимается другим HashMapJAVA

Программисты JAVA общаются здесь
Ответить Пред. темаСлед. тема
Anonymous
 Проблема с рейтингом еды LeetCode: изменение, внесенное одним HashMap, не воспринимается другим HashMap

Сообщение Anonymous »

Это для задачи оценки еды LeetCode.
У меня есть Food HashMap для хранения продуктов и Cuisine Rate HashMap для хранения кухни для всех продуктов.
После первоначальной настройки имеется ("sushi", "japanese", 8).
Он вызывает метод ChangeRating() для обновления суши. Внутри этого метода я сначала обновил ("суши", "японский", 16). Но затем вложенное updateHighestRated снова добавит дубликат («sushi», «japanese», 16) в Cuisine Rate HashMap. Я думаю, что HashMap скорости кухни каким-то образом сохраняет старое значение («sushi», «japanese», 8) даже после того, как оно было обновлено до («sushi», «japanese», 16).
Чтобы проверить это, у меня есть еще один вызов ChangeRating("sushi", 16) после предыдущего. На этот раз HashMap скорости кухни не добавляет дубликатов.

Код: Выделить всё

class Food{
public String name;
public String cuisine;
public int rating;

public Food(String name, String cuisine, int rating){
this.name = name;
this.cuisine = cuisine;
this.rating = rating;
}

void setRating(int rating){
this.rating = rating;
}
int getRating(){
return this.rating;
}
String getName(){
return this.name;
}
String getCuisine(){
return this.cuisine;
}

public String toString(){
return this.cuisine + " " + this.name + " " + this.rating;
}
}

public class FoodRatings {

HashMap tFood; //name -> Food
HashMap tRate; //cuisine -> TreeSet

public FoodRatings(String[] foods, String[] cuisines, int[] ratings) {

tFood = new HashMap();
tRate = new HashMap();

for(int i = 0; i < foods.length; i++){

Food obj = new Food(foods[i], cuisines[i], ratings[i]);
tFood.put(foods[i], obj);

updateHighestRated(obj);
}
}
public void changeRating(String name, int newRating) {
Food obj = tFood.get(name);
obj.setRating(newRating);

updateHighestRated(obj);
}

public void updateHighestRated(Food obj){
String cuisine = obj.cuisine;
TreeSet tSet = tRate.get(cuisine);
if(tSet == null){

Comparator comp = Comparator.comparing(Food::getRating)
.reversed()
.thenComparing(Food::getName);
tSet = new TreeSet(comp);
tRate.put(cuisine, tSet);
}
boolean b = tSet.add(obj);                  //

Подробнее здесь: [url]https://stackoverflow.com/questions/79034574/leetcode-food-rating-problem-change-made-by-one-hashmap-is-not-being-picked-up[/url]
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «JAVA»