Set<String> keys = mappings.keySet();
String[] keyArray = (String[]) keys.toArray();
String hashmapDetails = "";
for(int p=0; p < keyArray.length; p++){
String[] details = keyArray[p].split("/");
hashmapDetails += details[1];
hashmapDetails += mappings.get(keyArray[p]);
if (p != keyArray.length -1){
hashmapDetails += ";";
}
}
Pardon my lack of understanding but I'm trying to explore the usage of hashmaps. I understand that the toArray() returns an Object[]. However, is it not possible to type cast it to a String[]? As you can see in the codes, later, I need to go through an array and do some splitting and other String manipulation.
By doing this I got an error:
java.lang.ClassCastException: java.lang.Object[] cannot be cast to java.lang.String[]
Any guidance on how I should tackle this is greatly appreciated. Thanks!
3 Answers 3
You can't simply cast an Object[]
array to a String[]
array. You should instead use the generic version of toArray
, which should work better:
String[] keyArray = keys.toArray(new String[keys.size()]);
Also note that you could simply iterate over the entrySet
(that will save all the get
calls) and use a StringBuilder for better string concatenation efficiency:
StringBuilder hashmapDetails = new StringBuilder();
for(Map.Entry<String, String> e : mappings.entrySet()) {
String[] details = e.getKey().split("/");
hashmapDetails += details[1];
hashmapDetails += e.getValue();
hashmapDetails += ";";
}
String result = hashmapDetails.substring(0, hashmapDetails.length() - 1);
7 Comments
toArray(new String[0])
version is definitely the way to go. It's concise and expresses exactly what you're doing.It is possible to cast keyset to String[]. Try this:
String[] keys = map.keySet().toArray(new String[0]);
Comments
You could just iterate through the Set
, I don't think the toArray
step is necessary. Something like this:
Set<String> keys = mappings.keySet();
String hashmapDetails = "";
for(String key : keys){
String[] details = key.split("/");
hashmapDetails += details[1];
hashmapDetails += mappings.get(key);
if (p != keys.size() -1){
hashmapDetails += ";";
}
}