java.lang.ClassCastException:[Ljava.lang.Object; 无法转换为[Ljava.lang.String;

Jac*_*Sun 20 java arrays dictionary

我需要将HashMap转换为String数组,以下是我的java代码

import java.util.HashMap;
import java.util.Map;

public class demo {

    public static void main(String[] args) {

        Map<String, String> map1 = new HashMap<String, String>();

        map1.put("1", "1");
        map1.put("2", "2");
        map1.put("3", "3");

        String[] str = (String[]) map1.keySet().toArray();

        for(int i=0; i<str.length;i++) {
            System.out.println(str[i]);
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

当我运行代码时,我得到以下内容ClassCastException.

Exception in thread "main" java.lang.ClassCastException: [Ljava.lang.Object; cannot be cast to [Ljava.lang.String;
at demo.main(demo.java:17)
Run Code Online (Sandbox Code Playgroud)

Mur*_*nik 32

toArray()Object[]无论泛型如何,都会返回.您可以使用重载变体:

String[] str = map1.keySet().toArray(new String[map1.size()]);
Run Code Online (Sandbox Code Playgroud)

另外,由于SettoArray方法没有给出有关订单的保证,以及所有你使用的是打印出该数组,你可以迭代keySet()直接:

for (String str: map1.keySet()) {
    System.out.println(str);
}
Run Code Online (Sandbox Code Playgroud)

编辑:只是为了完成图片,在Java 8中,该foreach方法可用于使代码更优雅:

map1.keySet().forEach(System.out::println);
Run Code Online (Sandbox Code Playgroud)

  • `String [] str = map1.keySet().toArray(new String [map1.size()]);`你错过了map1.size()中的括号 (2认同)

Sab*_*san 5

它返回Object[]Not String[].试试这个:

Object[] obj = (Object[]) map1.keySet().toArray();
for(int i=0; i<obj.length;i++) {
    String someString = (String)obj[i];
    System.out.println(someString);
}
Run Code Online (Sandbox Code Playgroud)

  • 并在第一行将`Object []`转换为`Object []`? (3认同)