我可以将hashMap作为我的密钥,并将信息,名称,数量作为我的值吗?
好吧,说我已经有一个类(产品)设置了我的变量,getter和setter。在我的Invoice类中,这是hashMap的位置。我愿意这样说:
private HashMap<String, Products> keys = new HashMap<String, Products>
我不太确定如何访问HashMap。假设我实现了一个允许我从HashMap添加和删除发票的类,我不知道它们的值是什么:
keys.put(??value of id??,??not sure what goes here??);
答案 0 :(得分:19)
不确定。创建另一个包含您的信息,名称和数量的类,并将其作为HashMap的值。
答案 1 :(得分:7)
不,但最好的方法是将要保留的信息包装在一个类中的地图中:
public class Info {
private String info;
private String name;
private int quantity;
...
public Info(String info, String name, int quantity) {
...
}
}
然后执行此操作以在地图中添加内容:
Info info = new Info("info", "name", 2);
Map map = new HashMap<Integer, Info>();
map.put(22, info);
这样做可以解决问题:
Info info = map.get(22)
答案 2 :(得分:1)
HashMap<Integer, ArrayList<String>>
怎么样?
更新:请尽量避免这种情况,this是一种更好的方法。
答案 3 :(得分:0)
不完全是。
Map定义了键和值之间严格的1对1关系。地图中的一个键有一个值。
如果要将多个值与一个键关联,则需要执行以下操作之一:
定义Values
类以将值表示为单个对象;例如按照@ Starkey的和@ Javed的答案。然后地图变为Map<String, Values>
(假设键类型为String)。
将地图定义为Map<String,List<Object>>
或Map<String,Object[]>
,并将值表示为无类型列表/数组
将地图定义为Map<String,Properties>
或Map<String,Map<String,Object>>
,并将值表示为关联数组的Java等效项。
其中,第一个选项是最安全(运行时错误的最小机会),最有效和最好的风格。
(旁白:Apache公共MultiMap
可能被视为另一种可能性,但概念模型和API并不真正匹配此用例。)
答案 4 :(得分:0)
不确定。根据您的数据结构的灵活性,您可以使用Hashmap a la:
HashMap<IdType, List<String>>
,IdType
字符串或整数,具体取决于您要使用的密钥。HashMap<IdType, String[]>
HashMap<IdType, YourObjectType>
,其中YourObjectType
是您自己定义的对象,持有您喜欢的值 YourObjectType
当然可以是任何你可以定义为Object的东西。如果你愿意,还有另一个HashMap。
答案 5 :(得分:0)
使用Map时的一个问题是使用硬编码密钥。如果密钥是字符串,则密钥更改。可以考虑使用常量而不是硬编码字符串。
拥有专用类具有编译器检查名称更改的好处。但是,如前面的评论所述......它可能成为一个问题......
在我看来两者都是可行的。我们需要根据具体情况权衡哪个选项更好
答案 6 :(得分:0)
创建一个将四个封装在一起的对象。类似的东西:
public class Foo {
private String s1;
private String s2;
private int v3;
private MyObject obj1
// constructors, getters, helper functions.
}
答案 7 :(得分:0)
我认为Google图书馆的MultiMap可以达到目的
https://google.github.io/guava/releases/19.0/api/docs/com/google/common/collect/Multimap.html
Multimap<String, String> map = ArrayListMultimap.create();
String key = "uniqueKey";
map.put(key, "value1");
map.put(key, "value2");
map.put(key, "value3");
System.out.println(map);//{uniqueKey=[value1, value2, value3]}
答案 8 :(得分:-1)
当然,你可以这样声明它:HashMap<Integer, HashMap<String,Object>>
你使用外部hashmap将你的id链接到你的内部HashMap,而在内部的hashmap中你创建了键“info”,“name” ,“数量”并将它们与它们联系起来。
当然,您也可以使用ArrayList作为外部集合(它可以更好地匹配您的ID:ArrayList<HashMap<String,Object>>
,这样您就可以对每个“信息”进行索引(基于ID)访问, “name”,“quantity”hashmap“records”
答案 9 :(得分:-1)
您可以将ID作为密钥,并将List
或Set
(通常为Collection
)对象作为值。