Make Map not print Fruits in arbitrary order, but in order of least to most expensive
我试图创建一个类来表示一个水果店,并希望输出按价格排序的可用水果,从最低价格到最高价格。然而,即使我把价格加在我的水果价格上,按照最便宜到最贵的顺序,它总是以同样的任意顺序打印水果?我怎么能不这样做呢?
************
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | 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(); } } } |
****RealStudioApp.java ***
1 2 3 4 5 6 7 8 9 10 11 | 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(); } } |
号
****电流输出****
1 2 3 4 | Avaliable Fruit: Apple 2.00 Cherries 3.00 Banana 1.00 |
****期望输出(最便宜到最昂贵):****
1 2 3 4 | Avaliable Fruit: Banana 1.00 Apple 2.00 Cherries 3.00 |
。
应该使用treemap并在自定义比较器中指定所需的顺序。
您可以使用Linkedhashmap,并确保按照从最低到最高的顺序将水果插入到地图中,因为它保持插入顺序,不像常规的hashmap。
即更改线条:
1 | fruitPricesMap = new HashMap<>(); |
为此:
1 | fruitPricesMap = new LinkedHashMap<>(); |
号