3 回答

TA贡献1820条经验 获得超2个赞
如果您使用地图,则每个键都是唯一的。您不能将尺寸用作键,因为它们不是唯一的。
根据您的问题描述:
我有很多双鞋,每双鞋都有尺码、颜色和价格。鞋子必须按尺码订购。
地图似乎不是一个好的选择,因为地图通常没有顺序(除了SortedMap)。您需要一个可以根据特定标准排序的数据结构。AList似乎是一个非常好的选择。list 最常见的实现是ArrayList.
您首先需要一个类来存储应该如下所示的鞋子对象:
public class Shoe{
int size;
Color color; // Color is an enum, but it can be a String if you want to be less restrictive
int price;
public Shoe(int size, Color color, int price) {
...
}
然后你可以通过这种方式将你的鞋子存储在你的列表中:
List<Shoe> shoes = new ArrayList<>();
shoes.add(new Shoe(36, Color.BLACK, 30));
shoes.add(new Shoe(36, Color.WHITE, 35));
shoes.add(new Shoe(37, Color.BLACK, 40));
shoes.add(new Shoe(38, Color.BLACK, 40));
...
一旦你的清单被填满,你可以按尺寸订购它们:
shoes.sort(Comparator.comparing(Shoe::getSize));
替代方案:您可以使用相同的比较器创建一个TreeMap<Integer,List<Shoe>>(将键映射到列表以解决键冲突的排序映射),这样即使您插入新鞋,它也会保持有序,但它看起来超出了您的问题级别。

TA贡献1820条经验 获得超10个赞
为此,您可以使用 2 张地图。第一个地图将包含鞋子的名称作为键,地图作为值。第二张地图 - 属性。就像是:
Map<String, Map<String, Object>> shoes = new HashMap<>();
Map<String, Object> shoeProps = new HashMap<>();
shoeProps.put("color", "red");
shoeProps.put("size", 38);
shoeProps.put("price", 35);
shoes.put("nike", shoeProps);
添加回答
举报