如何在Map中存储多个字符串?

时间:2010-09-16 10:20:24

标签: java map

是否可以设置两个以上的对值?

例如:

Map<String,String,String,String>

号码,姓名,地址,电话 - 全部汇集在一起​​显示值。每个值与其他值相关联。

8 个答案:

答案 0 :(得分:132)

你在拒绝对象。您应该使用一个包含数字,名称,地址,电话的对象(也许您可以将其称为ContactInformation)并将其放入地图中。

答案 1 :(得分:49)

没有。 Map只有一个。如果您希望包含更多信息,请将字符串包装在新类中:

public class PersonalInfo {
   private final String name;
   private final String address;
   private final String phone;

   // constructor and getters
}

map.put(number, new PersonalInfo(name, address, phone));

答案 2 :(得分:13)

'正确'的解决方案是使用一个保存命名字段中的值的对象,但本着回答问题的精神,将使用一个简单的(如果不清洁的)解决方案:

Map<String,List<String>> yourMap = new HashMap<String,List<String>>();

List<String> info = new ArrayList<String>();
info.add(number);
info.add(name);
info.add(address);
info.add(phone);

yourMap.put(key, info);

注意google-collections有一系列实现此结构的类,开箱即用ListMultimap,它的实现ArrayListMultimap

答案 3 :(得分:7)

不,地图只能有一个键并映射到一个值。

这是Map的Javadoc:

  

将键映射到值的对象。一个   map不能包含重复键;   每个键最多可以映射一个值。

您可以做的是创建一个名为User的实体,其中包含一些细节,例如

public class User implements Serializable {

    private String firstName;
    private String lastNumber;
    private String address;
    private String phoneNumber;

    //Generated getters and setters here....
}

然后将其添加到地图中......

Map<String, User> userMap = new HashMap<String, User>();
User user = new User();
//populate user
userMap.put(uniqueUserID, user);

答案 4 :(得分:4)

以防您想要维护以下地图:“number,name” - &gt; “地址,电话”,你不希望创建一个类来封装这些属性。您可以查看Apache Commons Collections中方便的MultiKey:

http://commons.apache.org/collections/apidocs/org/apache/commons/collections/keyvalue/MultiKey.html

答案 5 :(得分:2)

嗯,您可以为Person创建一个类,包括数字,名称,地址和phoneno,然后创建一个Map

答案 6 :(得分:0)

正如其他人所说,地图是一个键和一个值之间的映射。这就是地图的javadoc所说的(因为v5中的泛型):

Interface Map<K,V>

...其中K是键的类型,V是值的类型。只是&lt; K,V&gt;。您必须准确定义两种类型。

值得一提的是,在数学中,'map'是一个术语,意思是将一种类型的值转换为另一种类型的值。 Java Map就是这样的反映(就像Scala中集合上可用的方法映射一样)。

答案 7 :(得分:0)

您的问题表明您希望在4个字段中的每个字段上都有密钥,而其他所有字段都成为值。通常,它是一个键和多个值打包在一个对象上。

请确认需要什么。