为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

吃鸡游戏 2022-05-12 16:37:36
我必须存储一个具有多个值的键,但我的值应该是一个字符串和一个 int。对于这个问题我必须使用 List、Stack、Queue 或 Map,我认为 Map 是正确的选择。我有很多双鞋,每双鞋都有尺码、颜色和价格。鞋子必须按尺码订购。我坚持认为关键可能是鞋子的尺寸,价值应该是颜色和价格,但我不知道如何实现这一点。例如我有:1 号,36 号,黑色,30 美元2 号,36 号,白色,35 美元3 号,37 号,黑色,40 美元4 号,38 号,黑色,45 美元例如,我如何使用 Map 存储所有这些(我认为)而不创建一类新的鞋子?更新:我也可以使用 SortedMap、SortedList 等。在问题的第二部分中,我必须添加和移除特定尺寸的鞋子。
查看完整描述

3 回答

?
DIEA

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>>(将键映射到列表以解决键冲突的排序映射),这样即使您插入新鞋,它也会保持有序,但它看起来超出了您的问题级别。


查看完整回答
反对 回复 2022-05-12
?
拉莫斯之舞

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


查看完整回答
反对 回复 2022-05-12
?
守着一只汪

TA贡献1872条经验 获得超3个赞

第一步:了解数据。

您没有一张数据地图,您有数据地图的层次结构。

上图:将鞋码映射到“细节”图

详细信息图:将颜色映射到价格


查看完整回答
反对 回复 2022-05-12
  • 3 回答
  • 0 关注
  • 214 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号