将Object []从hashmap键集转换为String []?

lyk*_*lyk 18 java hashmap

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 += ";";
    }
}
Run Code Online (Sandbox Code Playgroud)

请原谅我缺乏理解,但我正在尝试探索哈希映射的用法.我知道toArray()返回一个Object [].但是,是否无法将其转换为String []?正如您在代码中看到的,稍后,我需要通过一个数组并进行一些拆分和其他字符串操作.

通过这样做我得到一个错误:

java.lang.ClassCastException: java.lang.Object[] cannot be cast to java.lang.String[]
Run Code Online (Sandbox Code Playgroud)

我非常感谢任何关于如何解决这个问题的指导.谢谢!

ass*_*ias 25

您不能简单地将Object[]数组转换为String[]数组.您应该使用通用版本toArray,它应该更好用:

String[] keyArray = keys.toArray(new String[keys.size()]);
Run Code Online (Sandbox Code Playgroud)

另请注意,您可以简单地遍历entrySet(将保存所有get调用)并使用StringBuilder以获得更好的字符串连接效率:

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);
Run Code Online (Sandbox Code Playgroud)

  • @NRitH并非如此.如果数组足够大,则使用它,否则将创建一个新数组.它在javadoc中解释:http://docs.oracle.com/javase/7/docs/api/java/util/List.html#toArray(T []) - 另见:http://stackoverflow.com /问题/ 174093/toarraynew-myclass0或 - toarraynew-myclassmylist尺寸 (2认同)

Adn*_*nan 7

可以将键集转换为String [].试试这个:

String[] keys = map.keySet().toArray(new String[0]);
Run Code Online (Sandbox Code Playgroud)