首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何用相同的键使用HashMap多个值(不同类型、一个int和一个字符串)进行添加?

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

Stack Overflow用户
提问于 2019-01-18 18:19:07
回答 3查看 92关注 0票数 0

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

我有很多双鞋,每只鞋都有尺码、颜色和价格。这双鞋必须按尺码来定购。

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

例如,我有:

一双,36码,彩色黑色,售价30元。

2双,36码,彩色白色,售价35美元

第3双,37码,彩色黑色,售价40美元

第4双,38码,彩色黑色,售价45美元

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

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

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2019-01-18 19:08:51

如果使用地图,则每个键都是唯一的。您不能使用大小作为键,因为没有唯一的。

从你的问题描述:

我有很多双鞋,每只鞋都有尺码、颜色和价格。这双鞋必须是定购的,因为它们的尺寸不同。

地图似乎不是一个好的选择,因为地图通常是没有排序的(除了SortedMap)。您需要一个可以根据特定标准排序的数据结构。List似乎是一个很好的选择。list最常见的实现是ArrayList

首先需要一个类来存储应该如下所示的鞋子对象:

代码语言:javascript
复制
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) {
    ...
}

这样你就可以把鞋子放在你的单子里了:

代码语言:javascript
复制
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));
...

一旦您的列表被填充,您可以按大小排序:

代码语言:javascript
复制
shoes.sort(Comparator.comparing(Shoe::getSize));

替代方案:您可以使用相同的比较器创建一个TreeMap<Integer,List<Shoe>> (一个将键映射到列表以解决键冲突的排序映射),这样即使您插入了新鞋,它仍然是有序的,但它看起来超出了问题的级别。

票数 0
EN

Stack Overflow用户

发布于 2019-01-18 18:48:55

第一步:理解数据。

您没有一个数据映射,您的数据有一个映射层次结构。

顶部地图:将鞋子大小映射为“详细信息”地图。

详细地图:地图颜色到价格

票数 0
EN

Stack Overflow用户

发布于 2019-01-19 01:50:36

如果您想使用Map来存储并且密钥可能相同,请尝试使用谷歌番石榴多机

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54259509

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档