Java 数组到ArrayList的转换
数组 是一个元素的集合,可以是原始数据类型,也可以是对象。Java中的数组在本质上是静态的,而 ArrayLists则 只能将元素存储为对象。Java中的ArrayLists,与数组不同,在本质上是动态的。ArrayList是java.util包中的一个集合类,实现了java.util.List接口。
一个数组可以通过以下方法转换为ArrayList。
- 使用ArrayList.add()方法,手动添加ArrayList中的数组元素。该方法包括创建一个新的ArrayList,并使用add()方法将给定数组的所有元素添加到新创建的ArrayList中。
语法:
public void add(int index, E element)
参数:此函数接受2个强制性参数。
- index – 要插入指定元素的索引。
- element – 要插入的元素。
返回:该方法不返回任何值
异常:如果索引超出范围,该方法会抛出IndexOutOfBoundsException。
示例:
// Java program to illustrate conversion
// of an array to an ArrayList
import java.util.Arrays;
import java.util.ArrayList;
class ArrayToArrayList {
public static void func1(int arr[])
{
ArrayList<Integer> array_list =
new ArrayList<Integer>();
// Using add() method to add elements in array_list
for (int i = 0; i < arr.length; i++)
array_list.add(new Integer(arr[i]));
System.out.print(array_list);
}
public static void main(String[] args)
{
int array[] = { 1, 2, 3, 4, 5 };
func1(array);
}
}
输出:
[1, 2, 3, 4, 5]
- 使用java.utils.Arrays.asList()方法:该方法将数组转换为列表,然后将列表作为参数,用列表的值初始化一个新的ArrayList。
语法:
public static List asList(T[] a)
参数: 该方法接受一个强制参数T[] a,其中a是列表的后缀,T是数组的类型。
返回:该方法返回一个指定数组的列表视图。
示例:
// Java program to illustrate conversion
// of an array to an ArrayList
import java.util.Arrays;
import java.util.ArrayList;
class ArrayToArrayList {
public static void func2(Integer arr[])
{
// Using Arrays.asList() method
ArrayList<Integer> array_list =
new ArrayList<Integer>(Arrays.asList(arr));
System.out.print(array_list);
}
public static void main(String[] args)
{
// Integer objects are used instead
// of primitives for conversion to list
Integer array[] = { new Integer(1),
new Integer(2),
new Integer(3),
new Integer(4),
new Integer(5) };
func2(array);
}
}
输出:
[1, 2, 3, 4, 5]
- 使用java.utils.Collections类的Collections.addAll()方法:该方法以要插入数组值的ArrayList为第一参数;以要使用其值的Array为第二参数。然后它将数组的值复制到ArrayList中。
语法:
public static boolean addAll(Collection c, T.. a)
参数:该方法接受2个强制性参数。
- c – 这是一个集合,其中的元素将被插入。
- a – 要插入c中的数组,类型为T
返回:如果调用后集合发生了变化,该方法返回 “true”,否则返回 “false”。
异常:该方法会抛出
- 不支持的操作异常。
- 如果指定的集合为空,则抛出 **NullPointerException。
- llegalArgumentException 如果数组中的某个值的某些方面阻止它被添加到c中。
示例:
// Java program to illustrate conversion
// of an array to an ArrayList
import java.util.Collections;
import java.util.ArrayList;
class ArrayToArrayList {
public static void func3(String arr[])
{
ArrayList<String> array_list = new ArrayList<String>();
// Using Collections.addAll() method
Collections.addAll(array_list, arr);
System.out.print(array_list);
}
public static void main(String[] args)
{
String array[] = { "ABC", "DEF", "GHI", "JKL" };
func3(array);
}
}
输出:
[ABC, DEF, GHI, JKL]
- 使用java.utils.Arrays类的Arrays.stream()方法:该方法创建一个数组值的顺序流。然后在collect()方法和流的帮助下,这些值被复制到ArrayList中。
语法:
public static IntStream stream(T[] a)
参数:该方法接受一个强制参数’a’,它是要转换为T类型流的数组。
返回:该方法返回一个指定类型的数组流(这里是Int)。
解释:
使用Arrays.stream().collect()方法,在toList()方法的帮助下,使用java.util.stream.Collectors类将流转换为列表。
注意: 这种方法需要Java 8或更高版本。
示例:
// Java program to illustrate conversion
// of an array to an ArrayList
import java.util.Arrays;
import java.util.ArrayList;
import java.util.stream.Collectors;
class ArrayToArrayList {
public static void func4(String arr[])
{
// Using Arrays.stream.collect() method.
ArrayList<String> array_list = (ArrayList<String>)
Arrays.stream(arr)
.collect(Collectors.toList());
System.out.print(array_list);
}
public static void main(String[] args)
{
String array[] = { "ABC", "DEF", "GHI", "JKL" };
func4(array);
}
}
输出:
[ABC, DEF, GHI, JKL]
- 使用java.utils.List接口的List.of(Elements)方法:该方法将数组作为参数,然后创建一个数组值的不可变列表。然后将这个不可变的列表作为参数传递给创建一个新的ArrayList。
语法:
static {T} List{T} of(a)
参数: 该方法接受一个强制参数’a’,它是要转换的数组,T表示列表的元素类型(这个可以省略)。
返回:该方法返回一个包含指定元素的列表。
异常:如果数组为空,该方法会抛出一个NullPointerException。
注意:该方法需要Java 9或更高版本。
示例:
// Java program to illustrate conversion
// of an array to an ArrayList
import java.util.List;
import java.util.Arrays;
import java.util.ArrayList;
import java.util.stream.Collectors;
class ArrayToArrayList {
public static void func5(String arr[])
{
// Using List.of() method.
ArrayList<String> array_list =
new ArrayList<String>(List.of(arr));
System.out.print(array_list);
}
public static void main(String[] args)
{
String array[] = { "ABC", "DEF", "GHI", "JKL" };
func5(array);
}
}
输出:
[ABC, DEF, GHI, JKL]
参考资料
- https://docs.oracle.com/javase/8/docs/api/java/util/stream/package-summary.html
- https://docs.oracle.com/javase/8/docs/api/java/util/stream/Collectors.html
- https://docs.oracle.com/javase/9/docs/api/java/util/List.html
极客教程