使地图不按任意顺序打印水果,但顺序从最小到最昂贵

时间:2019-01-19 06:45:22

标签: java dictionary hashmap

我正在尝试创建一个代表水果商店的类,并希望输出按价格(从最低到最贵)排序的可用水果。但是,即使我按照从最便宜到最贵的顺序将价格添加到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

2 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:1)

您可以使用 LinkedHashMap ,并确保按照从最低到最昂贵的顺序将水果插入到地图中,因为它会保持插入顺序,这不同于常规的< strong> HashMap

即更改行:

fruitPricesMap = new HashMap<>();

对此:

fruitPricesMap = new LinkedHashMap<>();