关于java:Make Map不按任意顺序打印水果,但按最小到最贵的顺序排列

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<>();