Is it possible to set more than two pair value?
For example:
Map<String,String,String,String>
number,name,address,phone - All come together for display the values. Each value associated with others.
No. a Map
has only one key. If you want your value to contain more information, wrap the strings in a new class:
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));
The 'correct' solution is to use an object that holds the values in named fields, but in the spirit of answering the question asked, a simple (if unclean) solution would be to use:
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);
Note google-collections has a series of classes that implement this structure right out of the box called ListMultimap and it's implementation ArrayListMultimap
Nope, A Map can have only one key and mapped to one value.
This is the Javadoc for Map:
An object that maps keys to values. A map cannot contain duplicate keys; each key can map to at most one value.
What you can do is to create an entity called User
with some details e.g
public class User implements Serializable {
private String firstName;
private String lastNumber;
private String address;
private String phoneNumber;
//Generated getters and setters here....
}
then add it to a map like so....
Map<String, User> userMap = new HashMap<String, User>();
User user = new User();
//populate user
userMap.put(uniqueUserID, user);
Just in case you want to maintain a map of: "number, name" --> "address, phone" and you do not wish to create a class to encapsulate these attributes. You may have a look in the handy MultiKey in Apache Commons Collections:
http://commons.apache.org/collections/apidocs/org/apache/commons/collections/keyvalue/MultiKey.html
As others have said, a map is a mapping between a key and a value. That is why the javadoc for map says (since generics in v5):
Interface Map<K,V>
... where K is the type of the key, and V is the type of the value. Just <K, V>. You must define exactly two types.
It is worth mentioning that in mathematics 'map' is a term meaning to convert a value of one type into a value of another type. The Java Map is a reflection of this, (as is the method map available on collections in Scala).
No its not. In Java maps are interfaced as Map<K,V>
- so only two generic arguments are allowed. The question you ask can now mean two things:
K
relates to various values of type V
. The values themselves may not be mutually related. e.g the key fruits
with values apple,banana,guava
etc. This is your use case, but only in syntax.Map<K,List<V>>
for this.Map
. No List
needed.customerId
may have values name
,number
,address
etc. potentially of different types. In other, words the data forms the properties of some Object
. This is the perfect opportunity to use OOP to create a data structure. This is your use case, in spirit.Map<K,MyDataStructure>
to store these multiple values. Note that the values stay mutable. One needs manual implementation of equals
,hashCode
though. class MyDataStructure{
Type1 data1;
Type2 data2;
...
}
record
. One then uses Map<K,MyRecord>
. Note that records
are immutable but automatically supply Object
related functionality.record MyRecord(Type1 field1,Type2 field2//,Type3 ...)
In the above discussion, it becomes apparent that we are looking for a data structure each of whose rows or records is identified by a primary key and can contain fields of similar or differing type. Map<K,V>
isn't designed for this. A database is.