我正在学习是否可以使用Map<K,V>
接口来创建我正在尝试创建的程序。我的程序包含两个大数组,String[] groceryProducts
and各自的价格:int[] prices
。我想使用Map<K,V>
for这两个数组,以便将groceryProduct[xxx]
映射到相应的price[yyy]
。我是否正确理解我可以使用Map的参数(K,V)来做到这一点?我能做点什么吗
Map(prices[], groceryProducts[]);
然后将它们的所有产品和价格添加到地图中?这是两个参数的用途吗?我很喜欢编程,如果我的问题太愚蠢我很抱歉:)。
附带问题:使用Map来处理大数据量会影响性能吗?我认为在这种情况下它仍然比嵌套循环更好,不是吗?谢谢!
是的,您可以使用地图;它几乎可以比你的两个阵列做得更好。
两个参数中的第一个是地图中条目的“键”;每个键必须是唯一的。第二个参数是为该键存储的值。在Map<String, Integer>
的情况下,您有一个字符串键和一个整数值。对于Java Map,这些参数定义将存储在地图中的值的类型。
如果具有值的键已存储在映射中,并且您执行的语句存储该键的不同值,则会覆盖第一个键。
但是,你不会按照它的方式声明它们。最常见的方式是:
Map<String, Float> priceMap = new HashMap<>();
之后您可以使用以下语句加载地图:
priceMap.put("bread", 3.00);
priceMap.put("eggs", 2.50);
等等
然后,当你有一个字符串变量item
,它具有你想要价格的项目的名称时,你可以使用以下语句:
Float price = priceMap.get(item);
其他人建议使用Item
对象,其中包含项目名称及其价格。在其他情况下,这是合理的,甚至更好。在大多数重要的编程项目中,您的“项目”将具有多个特征(颜色,制造商等),并且OO编程的想法是创建一个类来表示这样的对象并将其所有特征一起存储在该对象中。在这种情况下,您可以使用Map<String, Item>
从其名称(或其他一些String键)映射到整个项目,然后从那里获取价格。
(编辑:对不起,我使用了整数的浮点数。同样的原则适用,我只考虑包含美元的一小部分的价格,因为这是我最熟悉的。人们也可以考虑使用BigDecimal,其处理更好具有精度限制的小数的。)