I’m sorry in advance if this question is really weird. I am sending data to a queue that I don’t want duplicate data sent to. The program has no way of preventing duplicate data items and just accepts them but I believe the queue ID have to be unique and I can specify those myself. So I want to try to make my ID generated based on the data I’m sending.
Say I have two string:
hello, SO how are you? //base case
hello, SO how are you? //same
hello, SO how are You? //different, notice the capital Y
What up, SO! //completely different
What can I convert it to in Java that would match the first two strings above but make the other two unique? I haven’t tried much so far(because I’m not sure exactly what is the best thing to convert it to), but I did play around a bit with GZIPOutputStream but the size seemed kind of similar and I wasn’t sure if it was the most efficient(i.e. smallest size like some crazy hex character or something).
I hope someone understands what I’m asking but if not, let me know and I’ll try my best to clarify.
Edit: sorry, Didn’t just want something for strings, I’m dealing with lists(and maybe dictionaries) also. sorry about that
Thanks
CODE:
public class hashtest {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
convert("hello world"); //same
convert("hello world"); //same
convert("hello world!"); //exclamation mark
convert("hello World"); //capital W
convert_list(new int[] {5, 2, -3}); //same
convert_list(new int[] {5, 2, -3}); //same
convert_list(new int[] {5, 3, -3}); //different
convert_list(new int[] {5, 2, -4}); //different
}
private static void convert_list(int[] is) {
// TODO Auto-generated method stub
System.out.println("word is " + is);
System.out.println("hashcode is " + is.toString());
System.out.println("****");
}
private static void convert(String string) {
// TODO Auto-generated method stub
System.out.println("word is " + string);
System.out.println("hashcode is " + string.hashCode());
System.out.println("****");
}
}
Either use the
Stringitself as the queue ID, or if you need anIntegeruseString.hashCode()(hashCode()returns the same value for the same characters)Edited:
If your object is not actually a String, the best approach is to implement your own
hashCode()method. Or for a "quick and dirty" you can simply render it as a String (make up a unique String out of the unique bits) and invoke String’s hashCode() on that.Edited (more):
The problem is you are using the
.toString()of an array, which in java isn’t implemented for the array class, so it falls back to the implementation for Object, which will be unique for every array, even if the contents are the same.Fortunately, the JDK has provided the answer: Use the utility method
Arrays.toString()