数组与集合相互转化通常我们用两种方式:
- 手动转化
- 使用集合或数组自带的方法转化
数组转集合
手动转化
List<String> list= new ArrayList<>();
String[] array = new String[] {"java", "html", "js"};
for (int i = 0; i < array.length; i++) {
list.add(array[i]);
}
方法转化
public static List asList(T… a)
返回由指定数组支持的固定大小的列表。 (将返回的列表更改为“写入数组”。)该方法作为基于数组和基于集合的API之间的桥梁,与Collection.toArray()相结合 。 返回的列表是可序列化的,并实现RandomAccess 。
此方法还提供了一种方便的方式来创建一个初始化为包含几个元素的固定大小的列表:
List stooges = Arrays.asList(“Larry”, “Moe”, “Curly”);
参数类型
T - 数组中对象的类
参数
a - 列表将被支持的数组
结果
指定数组的列表视图
String[] array = new String[] {"java", "html", "js"};
List<String> list = Arrays.asList(array);
集合转数组
手动转化
List<String> list = new ArrayList<>();
list.add("hello");
list.add("hi");
list.add("nihao");
String[] array = new String[list.size()];
for (int i = 0; i < list.size(); i++) {
array[i] = list.get(i);
}
方法转化
T[] toArray(T[] a)
返回包含此集合中所有元素的数组; 返回的数组的运行时类型是指定数组的运行时类型。 如果集合适合指定的数组,则返回其中。 否则,将为指定数组的运行时类型和此集合的大小分配一个新数组。
如果此集合适合指定的数组,并具有剩余空间(即,该数组具有比此集合更多的元素),则紧跟在集合结束后的数组中的元素将设置为null 。 ( 仅当调用者知道此集合不包含任何null元素时,这才有助于确定此集合的长度。)
如果此集合对其迭代器返回的元素的顺序做出任何保证,则此方法必须以相同的顺序返回元素。
像toArray()方法一样,此方法充当基于数组和基于集合的API之间的桥梁。 此外,该方法允许精确地控制输出阵列的运行时类型,并且在某些情况下可以用于节省分配成本。
假设x是一个已知只包含字符串的集合。 以下代码可用于将集合转储到新分配的数组中: String :
String[] y = x.toArray(new String[0]);
请注意, toArray(new Object[0])的功能与toArray()相同 。
参数类型
T - 包含集合的数组的运行时类型
参数
a - 要存储此集合的元素的数组,如果它足够大; 否则,为此目的分配相同运行时类型的新数组。
结果
一个包含此集合中所有元素的数组
异常
ArrayStoreException - 如果指定数组的运行时类型不是此集合中每个元素的运行时类型的超类型
NullPointerException - 如果指定的数组为空
List<String> list = new ArrayList<>();
list.add("hello");
list.add("hi");
list.add("nihao");
//Integer[] array=new Integer[list.size()];
//list.toArray(array);
String[] array = list.toArray(new String[0]);