У меня есть 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]