我如何在Java中转换ArrayList<String>对象为String[]数组?
当前回答
如果你的应用程序已经在使用Apache Commons lib,你可以稍微修改接受的答案,以避免每次都创建一个新的空数组:
List<String> list = ..;
String[] array = list.toArray(ArrayUtils.EMPTY_STRING_ARRAY);
// or if using static import
String[] array = list.toArray(EMPTY_STRING_ARRAY);
在ArrayUtils中还有一些预先分配的不同类型的空数组。
我们也可以欺骗JVM为我们创建一个空数组:
String[] array = list.toArray(ArrayUtils.toArray());
// or if using static import
String[] array = list.toArray(toArray());
但在我看来,这种方式真的没有什么优势,只是口味问题。
其他回答
List <String> list = ...
String[] array = new String[list.size()];
int i=0;
for(String s: list){
array[i++] = s;
}
在Java 11中,我们可以使用Collection.toArray(生成器)方法。下面的代码将创建一个新的字符串数组:
List<String> list = List.of("one", "two", "three");
String[] array = list.toArray(String[]::new)
从java。基地的java.util.Collection.toArray()。
List<String> list = ..;
String[] array = list.toArray(new String[0]);
例如:
List<String> list = new ArrayList<String>();
//add some stuff
list.add("android");
list.add("apple");
String[] stringArray = list.toArray(new String[0]);
不传递任何参数的toArray()方法返回Object[]。因此,您必须传递一个数组作为参数,该数组将由列表中的数据填充并返回。您也可以传递一个空数组,但也可以传递一个具有所需大小的数组。
重要更新:原来上面的代码使用了new String[list.size()]。然而,这篇博文揭示了由于JVM的优化,现在使用新的字符串[0]更好。
你可以使用Iterator<String>来迭代数组列表<String>中的元素:
ArrayList<String> list = new ArrayList<>();
String[] array = new String[list.size()];
int i = 0;
for (Iterator<String> iterator = list.iterator(); iterator.hasNext(); i++) {
array[i] = iterator.next();
}
现在您可以使用任何循环从String[]中检索元素。
Java 8中的替代方案:
String[] strings = list.stream().toArray(String[]::new);
Java 11 +:
String[] strings = list.toArray(String[]::new);
推荐文章
- codestyle;把javadoc放在注释之前还是之后?
- 如何在Spring中定义List bean ?
- 将Set<T>转换为List<T>的最简洁的方法
- 在JavaScript中,什么相当于Java的Thread.sleep() ?
- 在Lua中拆分字符串?
- 使用Java重命名文件
- URL从Java中的类路径加载资源
- .toArray(new MyClass[0]) or .toArray(new MyClass[myList.size()])?
- Hibernate中不同的保存方法之间有什么区别?
- Java 8流和数组操作
- 在javascript中从平面数组构建树数组
- Java Regex捕获组
- 从另一个列表id中排序一个列表
- 如何在Python中按字母顺序排序字符串中的字母
- Openssl不被视为内部或外部命令