Hashmap holding different data types as values for instance Integer, String and Object

JavaTypesHashmap

Java Problem Overview


I need to create a hashmap with key as integer and it should hold multiple values of different data types. For example if the key is msg id and the values are

  1. message of type string
  2. timestamp of type time
  3. count of type integer
  4. version of type integer

Then how to store the values of different data type with a single key into the hashmap?

Java Solutions


Solution 1 - Java

If you don't have Your own Data Class, then you can design your map as follows

Map<Integer, Object> map=new HashMap<Integer, Object>();

Here don't forget to use "instanceof" operator while retrieving the values from MAP.

If you have your own Data class then then you can design your map as follows

Map<Integer, YourClassName> map=new HashMap<Integer, YourClassName>();

import java.util.Date;
import java.util.HashMap;
import java.util.Map;
import java.util.Set;


public class HashMapTest {
public static void main(String[] args) {
	Map<Integer,Demo> map=new HashMap<Integer, Demo>();
	Demo d1= new Demo(1,"hi",new Date(),1,1);
	Demo d2= new Demo(2,"this",new Date(),2,1);
	Demo d3= new Demo(3,"is",new Date(),3,1);
	Demo d4= new Demo(4,"mytest",new Date(),4,1);
	//adding values to map
	map.put(d1.getKey(), d1);
	map.put(d2.getKey(), d2);
	map.put(d3.getKey(), d3);
	map.put(d4.getKey(), d4);
	//retrieving values from map
	Set<Integer> keySet= map.keySet();
	for(int i:keySet){
		System.out.println(map.get(i));
	}
	//searching key on map
	System.out.println(map.containsKey(d1.getKey()));
	//searching value on map
	System.out.println(map.containsValue(d1));
}

}
class Demo{
	private int key;
	private String message;
	private Date time;
	private int count;
	private int version;
	
	public Demo(int key,String message, Date time, int count, int version){
		this.key=key;
		this.message = message;
		this.time = time;
		this.count = count;
		this.version = version;
	}
	public String getMessage() {
		return message;
	}
	public Date getTime() {
		return time;
	}
	public int getCount() {
		return count;
	}
	public int getVersion() {
		return version;
	}
	public int getKey() {
		return key;
	}
	@Override
	public String toString() {
		return "Demo [message=" + message + ", time=" + time
				+ ", count=" + count + ", version=" + version + "]";
	}
	
}

Solution 2 - Java

You have some variables that are different types in Java language like that:

 message of type string
 timestamp of type time
 count of type integer
 version of type integer

If you use a HashMap like:

HashMap<String,Object> yourHash = new HashMap<String,Object>();
yourHash.put("message","message");
yourHash.put("timestamp",timestamp);
yourHash.put("count ",count);
yourHash.put("version ",version);

If you want to use the yourHash:

for(String key : yourHash.keySet()){
  String message = (String) yourHash.get(key);
  Datetime timestamp= (Datetime) yourHash.get(key);
  int timestamp= (int) yourHash.get(key);
}



Solution 3 - Java

Define a class to store your data first

public class YourDataClass {
	
	private String messageType;
	private Timestamp timestamp;
	private int count;
	private int version;
	
	// your get/setters
    ...........
}

And then initialize your map:

Map<Integer, YourDataClass> map = new HashMap<Integer, YourDataClass>();

Solution 4 - Java

Create an object holding following properties with an appropriate name.

  1. message
  2. timestamp
  3. count
  4. version

and use this as a value in your map.

Also consider overriding the equals() and hashCode() method accordingly if you do not want object equality to be used for comparison (e.g. when inserting values into your map).

Solution 5 - Java

Do simply like below....

HashMap<String,Object> yourHash = new HashMap<String,Object>();
yourHash.put(yourKey+"message","message");
yourHash.put(yourKey+"timestamp",timestamp);
yourHash.put(yourKey+"count ",count);
yourHash.put(yourKey+"version ",version);

typecast the value while getting back. For ex:

    int count = Integer.parseInt(yourHash.get(yourKey+"count"));
//or
int count = Integer.valueOf(yourHash.get(yourKey+"count"));
//or
int count = (Integer)yourHash.get(yourKey+"count"); //or (int)

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
Questionuser2024439View Question on Stackoverflow
Solution 1 - JavaRakesh MahapatroView Answer on Stackoverflow
Solution 2 - Javauser2567978View Answer on Stackoverflow
Solution 3 - JavaDrogbaView Answer on Stackoverflow
Solution 4 - JavaWillView Answer on Stackoverflow
Solution 5 - JavaNaveen AvidiView Answer on Stackoverflow