【问题标题】:Cannot cast from String[] to ArrayList<String>无法从 String[] 转换为 ArrayList<String>
【发布时间】:2012-10-03 19:51:52
【问题描述】:

我有一个想要放入 ArrayList 的资源字符串数组,但是返回的数据类型是字符串数组。 string[] 不能直接转换为 ArrayList 而不会收到以下错误:

无法从 String[] 转换为 ArrayList

如何将 String[] 数据类型转换为 ArrayList?

编辑

我有一个适配器,它的构造函数接受一个 ArrayList 和一个我想要填充它的资源字符串数组。

【问题讨论】:

    标签: android arrays string casting


    【解决方案1】:

    如果您可以使用List&lt;String&gt;(而不是专门的ArrayList&lt;String&gt;),您可以使用:

    List<String> list = Arrays.asList(stringArray);
    

    否则,您可以这样做:

    ArrayList<String> list = new ArrayList<String>(Arrays.asList(stringArray));
    

    但是,与其他建议的解决方案相比,后者的效率较低(在时间和对象创建计数方面)。它唯一的好处是代码精简到一行,一目了然。

    【讨论】:

    • List 和 ArrayList 不一样。
    • @AndroidAddict - 我意识到这一点。这就是为什么我对第一个建议进行了限定。然而,ArrayListList 的子类型,所以这很有可能会起作用。
    • @AndroidAddict 您理想的解决方案到底是什么?您将无法直接从数组到数组列表进行任何转换。这里有很多足够有效的答案。
    • 你也给了我。我有一个适配器,它的构造函数需要一个 ArrayList 和一个我想传入的资源字符串数组。所以这有效: MyListAdapter(this, resourceId, new ArrayList(Arrays.asList(getResources().getStringArray (R.array.string_array_list))));
    【解决方案2】:
    public ArrayList<String> arrayToArrayList(String[] array){
        ArrayList<String> arrayList = new ArrayList<String>(array.length);
        for(String string : array){
            arrayList.add(string);
        }
    
        return arrayList;
    }
    

    【讨论】:

    • 我确定这可行,但另一个答案更有效。不过谢谢!
    • 如果您构造arrayList 并将初始容量设置为array.length,效率将会提高。 @AndroidAddict - 为什么你认为这没有效率?
    • 从必要的编码量中提高效率。这个项目非常大,我们可以在任何地方通过合理的性能权衡来节省编码。这是我所指的唯一观点,并不是说它不会有效地执行。只是没有那么简洁。
    【解决方案3】:

    这个怎么样

    import java.util.Collections; 
    
    String[] myStringArray = new String[] {"foo", "bar", "baz"}; 
    List myList = new ArrayList(myStringArray.length);
    Collections.addAll(myList, myStringArray); 
    

    【讨论】:

    • 好吧,这行得通,但有没有更有效(简洁)的方法?如果是这样,请编辑您的答案以反映这一点。理想情况下,我希望在不创建另一个变量的情况下在一行中执行转换。
    • @AndroidAddict 我不知道,您可以保持问题开放,看看是否有人提出更好的方法,但如果您正在寻找简洁,java 可能不是适合您的语言 =) .
    • 除了在某个地方创建一个新的 ArrayList 之外,真的没有其他方法了。没有特殊的方法可以将数组转换为列表。
    • 如果您构造myList 并将初始容量设置为myStringArray.length,效率将会提高。
    猜你喜欢
    • 2012-08-22
    • 2011-08-20
    • 1970-01-01
    • 2015-07-31
    • 2022-01-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多