用Java将数组转换为ArrayList
时间:2020-01-09 10:35:02 来源:igfitidea点击:
在如何在Java中将ArrayList转换为Array的文章中,我们已经看到了进行该转换的不同方法。这篇文章是关于如何在Java中将数组转换为ArrayList的另一种方式。
在Java中将数组转换为ArrayList的选项
- 使用Arrays.asList()方法。参见示例。
- 使用Collections.addAll()方法。参见示例。
- 从Java 8开始,我们可以使用Java Stream API在Java中将数组转换为ArrayList。参见示例。
- 手动执行操作而不使用任何API方法。参见示例。
使用Arrays.asList()方法
使用Arrays.asList()方法可以将数组转换为ArrayList。此方法返回的列表由数组支持,因此List中的任何更改也将反映在数组中。
import java.util.Arrays; import java.util.List; public class ArrayToList { public static void main(String[] args) { String[] carArray = {"Audi", "Jaguar", "BMW", "Mini Cooper"}; // Converting array to arraylist List<String> carList = Arrays.asList(carArray); System.out.println("List Elements- " + carList); // changing element in List carList.set(1, "Mercedes"); System.out.println("Array Elements- " + Arrays.toString(carArray)); } }
输出:
List Elements- [Audi, Jaguar, BMW, Mini Cooper] Array Elements- [Audi, Mercedes, BMW, Mini Cooper]
从输出中可以看到,当ArrayList中索引1的元素发生更改时,更改也将反映到数组中。
这种方法的另一个缺点是返回列表是固定的,我们不能在返回的列表中添加或者删除元素。任何添加或者删除元素的尝试都会抛出java.lang.UnsupportedOperationException。
import java.util.Arrays; import java.util.List; public class ArrayToList { public static void main(String[] args) { String[] carArray = {"Audi", "Jaguar", "BMW", "Mini Cooper"}; // Converting array to arraylist List<String> carList = Arrays.asList(carArray); System.out.println("List Elements- " + carList); // trying to remove element carList.remove("Audi"); System.out.println("Array Elements- " + Arrays.toString(carArray)); } }
输出:
List Elements- [Audi, Jaguar, BMW, Mini Cooper] Exception in thread "main" java.lang.UnsupportedOperationException: remove at java.base/java.util.Iterator.remove(Iterator.java:102) at java.base/java.util.AbstractCollection.remove(AbstractCollection.java:299) at com.theitroad.ArrayToList.main(ArrayToList.java:14)
如果需要通过将数组转换为ArrayList来修改列表,则应使用返回的列表创建一个新的ArrayList。
import java.util.ArrayList; import java.util.Arrays; import java.util.List; public class ArrayToList { public static void main(String[] args) { String[] carArray = {"Audi", "Jaguar", "BMW", "Mini Cooper"}; // Converting array to arraylist List<String> carList = new ArrayList<String>(Arrays.asList(carArray)); System.out.println("List Elements- " + carList); // changing element in List carList.remove("Audi"); System.out.println("Array Elements- " + Arrays.toString(carArray)); System.out.println("List Elements- " + carList); } }
输出:
List Elements- [Audi, Jaguar, BMW, Mini Cooper] Array Elements- [Audi, Jaguar, BMW, Mini Cooper] List Elements- [Jaguar, BMW, Mini Cooper]
如通过创建新的ArrayList从输出中看到的那样,我们可以在结构上对其进行修改,现在更改也不会反映到数组中。
使用Collections.addAll()方法
我们还可以使用Collections.addAll()方法将数组转换为Java中的ArrayList。我们需要将List和array作为参数传递给此方法。
import java.util.ArrayList; import java.util.Collections; import java.util.List; public class ArrayToList { public static void main(String[] args) { String[] carArray = {"Audi", "Jaguar", "BMW", "Mini Cooper"}; List<String> carList = new ArrayList<String>(); Collections.addAll(carList, carArray); System.out.println("List Elements- " + carList); } }
输出:
List Elements- [Audi, Jaguar, BMW, Mini Cooper]
Java Stream API的collect()方法
从Java 8开始,我们还可以在Java Stream API中使用收集器将数组转换为Java中的ArrayList。
import java.util.List; import java.util.stream.Collectors; import java.util.stream.Stream; public class ArrayToList { public static void main(String[] args) { String[] carArray = {"Audi", "Jaguar", "BMW", "Mini Cooper"}; List<String> carList = Stream.of(carArray).collect(Collectors.toList()); System.out.println("List Elements- " + carList); } }
输出:
List Elements- [Audi, Jaguar, BMW, Mini Cooper]
不使用任何API方法
我们也可以通过编写自己的逻辑而不是使用任何API方法来将数组转换为ArrayList。它仅需要一个简单的for循环,我们需要在其中将数组的迭代元素添加到ArrayList中。
import java.util.ArrayList; import java.util.List; public class ArrayToList { public static void main(String[] args) { String[] carArray = {"Audi", "Jaguar", "BMW", "Mini Cooper"}; List<String> carList = new ArrayList<String>(); for(String car : carArray) { carList.add(car); } System.out.println("List Elements- " + carList); } }
输出:
List Elements- [Audi, Jaguar, BMW, Mini Cooper]