使地图不按任意顺序打印水果,而是按最便宜到最贵的顺序打印



我正在尝试创建一个类来表示水果商店,并希望输出按价格排序的可用水果,从最低到最高。然而,即使我按照最便宜到最贵的顺序将价格添加到我的FruitPricesMap中,它总是以相同的任意顺序打印水果?我怎么能让它不这么做?

****FruitStore.java***

import java.util.*;
public class FruitStore {
private Map<String, Double> fruitPricesMap;
public FruitStore() {
fruitPricesMap = new HashMap<>();
}
public boolean addOrUpdateFruit(String fruitName, double fruitPrice) {
fruitPricesMap.put(fruitName, fruitPrice);
return true;
}
public void printAvaliableFruit() {
System.out.println("Avaliable Fruit:");
for (String key : fruitPricesMap.keySet()) {
System.out.printf("%-15s  %.2f", key, fruitPricesMap.get(key));
System.out.println();
}
}
}

****FruitStoreApp.java***

public class FruitStoreApp {
public static void main(String[] args) {
FruitStore fs = new FruitStore();
fs.addOrUpdateFruit("Banana", 1.00);
fs.addOrUpdateFruit("Apple", 2.00);
fs.addOrUpdateFruit("Cherries", 3.00);
fs.printAvaliableFruit();
}
}

****电流输出***

Avaliable Fruit:
Apple            2.00
Cherries         3.00
Banana           1.00 

****期望输出(从最便宜到最贵):***

Avaliable Fruit:
Banana           1.00
Apple            2.00
Cherries         3.00

您应该使用TreeMap并在自定义比较器中指定您想要的顺序。

您可以使用LinkedHashMap,并确保按照从最低到最高的顺序将水果插入到映射中,因为它保持插入顺序,而不是常规的HashMap

即更改线路:

fruitPricesMap = new HashMap<>();

到此:

fruitPricesMap = new LinkedHashMap<>();

最新更新