Community
cancel
Showing results for 
Search instead for 
Did you mean: 
Yumo_J_
Beginner
80 Views

accessing same data in the concurrent hash map using two different keys

We need to access same data from concurrent hash map using two different keys (say using user id OR using user name).

Currently we are achieving it by inserting data twice, each with different key. It is working, but is there a better way?

Thanks 

0 Kudos
5 Replies
Yumo_J_
Beginner
80 Views

can anyone or intel support help please. I am not liking idea or keeping duplicate entries in hashmap.

Thanks

 

Yumo_J_
Beginner
80 Views

anyone? intel support??

 

Alexei_K_Intel
Employee
80 Views

  • Is it possible that you have only user id or user name?
  • Is it possible that the same user have multiple ids or multiple ids are assigned to the same user?

​If the both statement are negative than you can insert structures of <id, name> and define your own HashCompare that implements equal with the following behavior:

  • returns true for <id, 0> and <id, X>
  • returns true for <0, name> and <X, name>
  • returns true for <id, name> and <id, name>
  • returns false for any other case

Where X any value, 0 is impossible value.

Than if you need to find something by id, find <id,0>. If by name, find <0, name>.

Regards,
Alex

Yumo_J_
Beginner
80 Views

Alex,

Thanks for the suggestion. Each user has an unique id and a name. 

However, what about hash() function? the hash for <id, name> will be different from  <id, 0> or <0, name> hash and in this case equal() will not be called at all. Pls correct me if wrong but I assume equal() only gets called for hash collisions (same hash).  

Thanks

Alexei_K_Intel
Employee
80 Views

You are right. I though about iterating over the container but it is not concurrent and it will be a linear search (that is not what is expected). Looks like you really need two maps.

Reply