是否可以有一个包含4个对象的hashmap?

时间:2010-09-20 03:25:10

标签: java hashmap

我可以将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??);

10 个答案:

答案 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作为密钥,并将ListSet(通常为Collection)对象作为值。