954,536 Members — Technology Publication meets Social Media
Username:
Password:
Lost login information?
Have something to say? Contribute New Article Reply to this Article

Question about indexing objects

Hello everyone,


I want to use indexing technology to speed up searching operation of my application. I have found that Java built-in type Hashtable can only have one key for each object. But my requirement is that an object can have multiple keys for an object. For example, the objects may be arranged in the following model,

Object (key1, key2, value)

and the related instances maybe

John ("male", "single", )
Smith ("male", "married", )

When given key1 (or key2, or key1 and key2 altogether), I want to find out matched objects. For example, when given "male", John and Smith are both matched. When given "single", only John is matched. When given "female" and "single", no records are matched.


Thanks in advance,
George

George2
Junior Poster
189 posts since Nov 2004
Reputation Points: 11
Solved Threads: 0
 

Hello everyone,

I want to use indexing technology to speed up searching operation of my application. I have found that Java built-in type Hashtable can only have one key for each object. But my requirement is that an object can have multiple keys for an object. For example, the objects may be arranged in the following model,

Object (key1, key2, value)

and the related instances maybe

John ("male", "single", ) Smith ("male", "married", )

When given key1 (or key2, or key1 and key2 altogether), I want to find out matched objects. For example, when given "male", John and Smith are both matched. When given "single", only John is matched. When given "female" and "single", no records are matched.

Thanks in advance, George

Yeah Java does not provide MultiKey Map kind of a thing. So you are left with 2 choices. Use some third party class (jakarta collections package has what you are looking for) or implement your own. You can do this by extending the HashMap class or simply defining a custom "equals" function for your "key" class instead of using default String class for key.

cheers,
aj.wh.ca

aj.wh.ca
Junior Poster in Training
53 posts since Mar 2005
Reputation Points: 12
Solved Threads: 1
 

Thanks aj.wh.ca,

Yeah Java does not provide MultiKey Map kind of a thing. So you are left with 2 choices. Use some third party class (jakarta collections package has what you are looking for) or implement your own. You can do this by extending the HashMap class or simply defining a custom "equals" function for your "key" class instead of using default String class for key.

cheers, aj.wh.ca

Your ideas are great! I am very interested in the extending HashMap class solution in your reply. Could you provide more information to this solution? Especially how to define "key" class and "equal" function to be flexible to be reusable in other applications.

Another question is, what class of jakarta Collection should I use to meet my requirements? I have studied the document of jakarta Collection but can not find a suitable one. Could you help?


regards,
George

George2
Junior Poster
189 posts since Nov 2004
Reputation Points: 11
Solved Threads: 0
 

Thanks aj.wh.ca,

Your ideas are great! I am very interested in the extending HashMap class solution in your reply. Could you provide more information to this solution? Especially how to define "key" class and "equal" function to be flexible to be reusable in other applications.

Another question is, what class of jakarta Collection should I use to meet my requirements? I have studied the document of jakarta Collection but can not find a suitable one. Could you help?

regards, George

Thanks George.

For the 3rd party API consider following link. http://jakarta.apache.org/commons/collections/apidocs-COLLECTIONS_3_1/org/apache/commons/collections/MultiMap.html

A simpler solution would be as I said earlier to make a new class.

e.g.

public class MyKey // you may want to extend an existing class say String
{
String[] keys ;
MyKey(String[] k){....}
public boolean equals(MyKey k){//simply compare the keys here as per your conditions}
}

Now in the hashmap for key,value pair insert object of MyKey and the associated value.
This may not be best in performance but this is clean and simple.

regards,
aj.wh.ca

aj.wh.ca
Junior Poster in Training
53 posts since Mar 2005
Reputation Points: 12
Solved Threads: 1
 

Thanks aj.wh.ca,

Thanks George.

For the 3rd party API consider following link. http://jakarta.apache.org/commons/collections/apidocs-COLLECTIONS_3_1/org/apache/commons/collections/MultiMap.html

A simpler solution would be as I said earlier to make a new class.

e.g.

public class MyKey // you may want to extend an existing class say String { String[] keys ; MyKey(String[] k){....} public boolean equals(MyKey k){//simply compare the keys here as per your conditions} }

Now in the hashmap for key,value pair insert object of MyKey and the associated value. This may not be best in performance but this is clean and simple.

regards, aj.wh.ca

You are too kind and too great!


regards,
George

George2
Junior Poster
189 posts since Nov 2004
Reputation Points: 11
Solved Threads: 0
 

This article has been dead for over three months

Post: Markdown Syntax: Formatting Help
You