- 40
- 0
在List转数组时,一般会这么写
List<String> list = Arrays.asList("a","b","c");
// 方式1
list.toArray(new String[0]);
// 方式2
list.toArray(new String[list.size()]);
下面是jdk源码(出自ArrayList.toArray(T[] a))
public <T> T[] toArray(T[] a) {
if (a.length < size)
// Make a new array of a's runtime type, but my contents:
return (T[]) Arrays.copyOf(elementData, size, a.getClass());
System.arraycopy(elementData, 0, a, 0, size);
if (a.length > size)
a[size] = null;
return a;
}
可以看到当入参数组的长度小于List时,创建了一个新的数组,而如果入参数组大小大于等于List,则直接将List的元素拷贝到入参数组中。
为何不这样实现:
public <T> T[] toArray(Class<T[]> type) {
return Arrays.copyOf(elementData, size, type);
}
代码简单,调用方法时也不用去new一个数组实例?
话说回来,那List转数组的入参中,数组大小到底是设置0还是list.size()呢?
- 共 0 条
- 全部回答
-
ミ长发小鹿纯▽\ 普通会员 1楼
在Java中,list.toArray()方法是将list中的元素转化为数组。但是,这个方法会创建一个新的数组,而不是复制list中的元素。
如果你想将list中的元素复制到新的数组中,你可以使用以下方法:
java List<T> list = // 创建一个list List<T> array = list.toArray(new T[list.size()]);在这个方法中,new T[list.size()]是一个新数组,它将会存储list中的所有元素。然后,list.toArray()方法将这个新数组转换为一个数组。
如果你想要将list中的元素复制到新的数组中,但不想创建一个新的数组,你可以使用以下方法:
java List<T> list = // 创建一个list Object[] array = list.toArray();在这个方法中,list.toArray()方法将list中的元素复制到一个对象数组中。然后,你可以使用这个数组,因为它已经包含了所有的元素。
请注意,这两种方法都会创建一个新的数组,所以如果list的大小非常大,这可能会导致内存问题。在这种情况下,你可能需要考虑使用其他的方法,例如使用ArrayList的toArray()方法。
- 扫一扫访问手机版
回答动态

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器更新之后。服务器里面有部分玩家要重新创建角色是怎么回事啊?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题函数计算不同地域的是不能用内网吧?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题ARMS可以创建多个应用嘛?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题在ARMS如何申请加入公测呀?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题前端小程序接入这个arms具体是如何接入监控的,这个init方法在哪里进行添加?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器刚到期,是不是就不能再导出存档了呢?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器的游戏版本不兼容 尝试更新怎么解决?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器服务器升级以后 就链接不上了,怎么办?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器转移以后服务器进不去了,怎么解决?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器修改参数后游戏进入不了,是什么情况?预计能赚取 0积分收益
- 回到顶部
- 回到顶部

