最近在写代码的时候需要用到的List的toArray方法。可是程序报错了
报错代码大致这样的
public void find(){ List<String> list = new ArrayList<String>(); list.add("have"); list.add("no"); list.add("problem"); String[] arr = (String[]) list.toArray(); for(String str : arr){ System.out.println(str); } }
这里在执行toArray方法时报如下异常
java.lang.ClassCastException: [Ljava.lang.Object; cannot be cast to [Ljava.lang.String;
起初想,不是加了类型转换了嘛。怎么还……,后来查了一下,将toArray的用法大致整理如下
第一种用法:在toArray方法中添加参数 new String[0]
public void find(){ List<String> list = new ArrayList<String>(); list.add("have"); list.add("no"); list.add("problem"); String[] arr = list.toArray(new String[0]); for(String str : arr){ System.out.println(str); } }
打印如下结果
have
no
problem
第二种用法:仍然是toArray方法添加参数,区别看代码
public void find(){ List<String> list = new ArrayList<String>(); list.add("have"); list.add("no"); list.add("problem"); String[] arr = new String[list.size()]; list.toArray(arr); for(String str : arr){ System.out.println(str); } }
仍然打印正确结果,注意的是,这里数组arr的最小长度为list的大小,否则转化结束后,数组arr中全是空值。当然比list的大小还要大,是可以的
第三种方法:不加参数,但是接受toArray方法返回的值变量类型需为Object[]
public void find(){ List<String> list = new ArrayList<String>(); list.add("have"); list.add("no"); list.add("problem"); Object[] arr = list.toArray(); for(Object str : arr){ System.out.println(str); } }
这样也可以打印正确结果
后来发现在数组变量前添加类型转化似乎是行不通的,基本数据类型之间这样转化编译时就报错了
是否还有其他用法有待后面的学习,先大致记录如上
相关推荐
在实际开发中,`toArray()`方法的使用场景非常广泛,例如在数据交换、数据备份或者算法实现中。了解并熟练掌握这个方法对于提高代码质量和效率至关重要。在深入研究源码时,我们可能会发现JDK的开发者是如何通过巧妙...
尽管`List<T>` 在内部确实使用了一个数组(`_items`)来存储元素,但`ToArray()` 方法并不像我们可能想象的那样简单地返回该数组的引用。实际上,当调用`ToArray()` 时,它会创建一个新的数组,并将`List<T>` 中的...
为了尽量保持对原有框架影响最小,作者并没有直接修改`toArray`方法,而是新增了一个方法`getList`来替代`toArray`。在`vendor/laravel/framework/src/Illuminate/Support/Collection.php`文件中的`toArray`方法下,...
Java ArrayList 类中的 `toArray(T[])` 方法的参数类型使用 `T` 而不是 `E`,这在初看之下似乎违背了泛型的主要目的——提供类型安全。然而,这样的设计实则是为了增加代码的灵活性和实用性。让我们深入探讨一下其中...
在jQuery的学习过程中,`toArray()`是一个非常实用的方法,它能够将jQuery对象转换为普通的JavaScript数组,方便我们进行进一步的数组操作。 `jQuery.toArray()`的核心作用在于,当你有一个jQuery对象,它可能包含...
一、方法一:使用`Items.Add()`方法 这是最直接、最常用的方法,通过调用`ComboBox.Items.Add()`方法逐个添加项。例如: ```csharp foreach (string item in itemList) { comboBox1.Items.Add(item); } ``` 在这...
Java 中数组列表 ArrayList 的使用 ArrayList 是 Java 中的一种...此外,ArrayList 还有很多其他的方法和属性,例如 Clear、Contains、IndexOf 等,大家可以查看 MSDN,了解更多关于 ArrayList 的使用方法和技巧。
C# 集合一系列扩展方法 Enumerable 使用示例Select、 Where、ToList、ToArray、FirstOrDefault、All、Any等等和应用场景
这里可以使用Where方法筛选出不包含目标值的元素,然后使用ToArray将其转换回数组。这种方法代码简洁,但处理大量数据时可能效率较低。 ```csharp int[] numbers = { 1, 3, 4, 5, 4, 2 }; int valueToRemove = 5...
最后,使用 MemoryStream 对象的 ToArray 方法将 XML 数据转换为 byte 数组,然后使用 Encoding.UTF8.GetString 方法将其转换为 UTF-8 编码的字符串。 在上面的代码中,首先创建了一个 MemoryStream 对象,然后创建...
getUTCMilliseconds 方法 使用全球标准时间(UTC)返回Date 对象的毫秒数。 getUTCMinutes 方法 使用全球标准时间(UTC)返回 Date 对象的分钟数。 getUTCMonth 方法 使用全球标准时间(UTC)返回 Date 对象的月份...
- `toArray()`方法返回的数组是安全的,因为集合并不维护对返回数组的引用,允许调用者自由修改返回的数组。 5. **子类扩展**: - 要创建一个不可修改的集合,程序员只需要扩展`AbstractCollection`并提供`...
**方法一:使用toArray()方法** ```java List<String> list = new ArrayList(); list.add("a1"); list.add("a2"); // 使用toArray()方法,传入一个大小等于list.size()的String数组 String[] toBeStored = list....
3. **使用 `ToArray` 和 `ToList` 方法**:这些方法可以直接将集合转换为数组或列表: ```csharp List<int> list = new List(new int[] { 1, 2 }); int[] array = list.ToArray(); ``` 4. **多维数组到一维数组...
本文将详细介绍如何在 C# 中有效地使用 MATLAB 进行参数传递,并通过实例展示具体的实现方法。 #### 二、MATLAB 与 C# 集成基础 为了使 C# 和 MATLAB 能够协同工作,我们需要了解 MATLAB 提供的一个名为 MATLAB ...
在EF中,当使用`ToList()`、`ToArray()`等方法时,如果数据量大,可能会导致内存溢出。而通过`yield`关键字配合`IEnumerable`接口,可以实现延迟执行,仅在遍历时才执行查询,显著提高了性能。 例如,以下是一个...
getUTCMilliseconds 方法 使用全球标准时间(UTC)返回Date 对象的毫秒数。 getUTCMinutes 方法 使用全球标准时间(UTC)返回 Date 对象的分钟数。 getUTCMonth 方法 使用全球标准时间(UTC)返回 Date 对象的月份...
getUTCMilliseconds 方法 使用全球标准时间(UTC)返回Date 对象的毫秒数。 getUTCMinutes 方法 使用全球标准时间(UTC)返回 Date 对象的分钟数。 getUTCMonth 方法 使用全球标准时间(UTC)返回 Date 对象的月份...
### 使用JNA替代JNI调用DLL,并解决内存溢出问题 #### 问题背景 在项目的开发过程中,常常遇到需要处理二进制流数据并对其进行解析处理的情况。这种情况下,如果上层应用平台采用的是Java开发,而底层算法或数据...