如何使用 HashMap 添加具有相同键的多个值(不同类型、一个 int 和一个字符串)?

我必须存储一个具有多个值的键,但我的值应该是一个字符串和一个 int。对于这个问题我必须使用 List、Stack、Queue 或 Map,我认为 Map 是正确的选择。

我有很多双鞋,每双鞋都有尺码、颜色和价格。鞋子必须按尺码订购。

我坚持认为关键可能是鞋子的尺寸,价值应该是颜色和价格,但我不知道如何实现这一点。

例如我有:

1 号,36 号,黑色,30 美元
2 号,36 号,白色,35 美元
3 号,37 号,黑色,40 美元
4 号,38 号,黑色,45 美元

例如,我如何使用 Map 存储所有这些(我认为)而不创建一类新的鞋子?

更新:我也可以使用 SortedMap、SortedList 等。在问题的第二部分中,我必须添加和移除特定尺寸的鞋子。


吃鸡游戏
浏览 215回答 3
3回答

DIEA

如果您使用地图,则每个键都是唯一的。您不能将尺寸用作键,因为它们不是唯一的。根据您的问题描述:我有很多双鞋,每双鞋都有尺码、颜色和价格。鞋子必须按尺码订购。地图似乎不是一个好的选择,因为地图通常没有顺序(除了SortedMap)。您需要一个可以根据特定标准排序的数据结构。AList似乎是一个非常好的选择。list 最常见的实现是ArrayList.您首先需要一个类来存储应该如下所示的鞋子对象:public class Shoe{&nbsp; &nbsp; int size;&nbsp; &nbsp; Color color; // Color is an enum, but it can be a String if you want to be less restrictive&nbsp; &nbsp; int price;&nbsp; &nbsp; public Shoe(int size, Color color, int price) {&nbsp; &nbsp; ...}然后你可以通过这种方式将你的鞋子存储在你的列表中: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>>(将键映射到列表以解决键冲突的排序映射),这样即使您插入新鞋,它也会保持有序,但它看起来超出了您的问题级别。

拉莫斯之舞

为此,您可以使用 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);

守着一只汪

第一步:了解数据。您没有一张数据地图,您有数据地图的层次结构。上图:将鞋码映射到“细节”图详细信息图:将颜色映射到价格
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java