在java中,list 和 数组(array) 之间的转换是一个常见的操作。由于它们是不同的数据结构,java提供了一些方法来在它们之间进行转换。我们会从list到数组和数组到list两种情况分别讨论。
1. list 转 数组
假设你有一个 `list` 类型的对象,想要将其转换为一个数组。你可以使用 list`类的 toarray()方法。
(a) list 转 数组(object类型)
最常见的转换是将一个 `list` 转换为一个普通的对象数组 `object[]`,方法如下:
import java.util.list; import java.util.arraylist; public class listtoarrayexample { public static void main(string[] args) { // 创建一个list list<string> list = new arraylist<>(); list.add("a"); list.add("b"); list.add("c"); // 将list转换为数组(object类型) object[] array = list.toarray(); // 输出结果 for (object obj : array) { system.out.println(obj); } } }
在这个例子中,`list.toarray()` 返回的是一个 `object[]` 类型的数组。此时数组的元素类型是 `object`,如果需要更具体的类型,可以强制转换。
(b) list 转 数组(指定类型)
如果你知道 list 中存储的是某个具体类型的元素(比如 `string`),你可以使用 `toarray(t[] a)` 方法来指定数组的类型,从而避免转换时的强制类型转换:
import java.util.list; import java.util.arraylist; public class listtoarrayexample { public static void main(string[] args) { // 创建一个list list<string> list = new arraylist<>(); list.add("a"); list.add("b"); list.add("c"); // 将list转换为数组(指定类型) string[] array = list.toarray(new string[0]); // 输出结果 for (string str : array) { system.out.println(str); } } }
在这个例子中,list.toarray(new string[0]) 生成了一个类型为 string[]的数组。new string[0]表示传入的数组大小,实际上该数组的大小会根据 list 的元素数自动调整。
(c) 对于更复杂的 list 类型
如果你的 list 中包含自定义类型(比如一个 `person` 类),转换的方法和上述类似:
import java.util.list; import java.util.arraylist; class person { string name; int age; person(string name, int age) { this.name = name; this.age = age; } @override public string tostring() { return name + ", " + age; } } public class listtoarrayexample { public static void main(string[] args) { list<person> list = new arraylist<>(); list.add(new person("alice", 30)); list.add(new person("bob", 25)); // 将list转换为person类型的数组 person[] array = list.toarray(new person[0]); // 输出结果 for (person person : array) { system.out.println(person); } } }
2. 数组 转 list
如果你有一个数组,想要将其转换为一个 `list`,你可以通过 `arrays.aslist()` 方法来实现。
(a) 数组 转 list(基本数据类型)
对于一个简单的数组(如 `int[]` 或 `string[]`),你可以这样做:
import java.util.arrays; import java.util.list; public class arraytolistexample { public static void main(string[] args) { // 创建一个数组 string[] array = {"a", "b", "c"}; // 将数组转换为list list<string> list = arrays.aslist(array); // 输出结果 for (string str : list) { system.out.println(str); } } }
(b) 数组 转 list(原始类型数组)
注意,`arrays.aslist()` 方法对于原始类型数组(如 `int[]`, `double[]` 等)并不会返回一个 `list<integer>` 或 `list<double>` 等类型的 `list`,而是会返回一个 `list<int[]>` 类型的 list。要避免这个问题,你需要将原始类型数组包装成相应的包装类数组,然后再使用 `arrays.aslist()`。
import java.util.arrays; import java.util.list; public class arraytolistexample { public static void main(string[] args) { // 创建一个int数组 int[] array = {1, 2, 3}; // 将int数组包装为integer数组 integer[] boxedarray = arrays.stream(array).boxed().toarray(integer[]::new); // 将integer数组转换为list list<integer> list = arrays.aslist(boxedarray); // 输出结果 for (integer num : list) { system.out.println(num); } } }
(c) 数组 转 list(自定义对象数组)
如果你有一个自定义类型的数组,使用 `arrays.aslist()` 同样适用:
import java.util.arrays; import java.util.list; class person { string name; int age; person(string name, int age) { this.name = name; this.age = age; } @override public string tostring() { return name + ", " + age; } } public class arraytolistexample { public static void main(string[] args) { // 创建一个person类型的数组 person[] array = {new person("alice", 30), new person("bob", 25)}; // 将数组转换为list list<person> list = arrays.aslist(array); // 输出结果 for (person person : list) { system.out.println(person); } } }
3. 注意事项
(a) `arrays.aslist()` 的限制
- 使用 `arrays.aslist()` 创建的 list 是一个 **固定大小 的 list,这意味着你不能向 list 中添加或删除元素。如果试图进行这样的操作,会抛出 `unsupportedoperationexception`。
例如:
list<string> list = arrays.aslist("a", "b", "c"); list.add("d"); // 运行时抛出 unsupportedoperationexception
如果你需要一个可修改的 list,应该将其包装在一个新的 `arraylist` 中:
list<string> list = new arraylist<>(arrays.aslist("a", "b", "c")); list.add("d"); // 现在可以修改
(b) 通过 `toarray()` 方法进行类型转换
如果 list 的类型不是你想要的类型(例如 list 存储了类型为 `object` 的元素),可以在进行转换时强制类型转换。例如:
object[] objarray = list.toarray(); string[] strarray = (string[]) objarray; // 强制转换为 string[]
(c) 对于原始类型数组
java 没有直接将原始类型数组(如 `int[]`, `double[]`)转换为 list 的方法。你可以先将原始类型数组转换为包装类数组,然后再用 `arrays.aslist()` 方法转换成 list。例如:
int[] array = {1, 2, 3}; integer[] boxedarray = arrays.stream(array).boxed().toarray(integer[]::new); list<integer> list = arrays.aslist(boxedarray);
总结
- list 转 数组:使用 `toarray()` 方法。对于类型化的 list,推荐使用 `toarray(t[] a)` 方法,这样可以避免不必要的类型转换。
- 数组 转 list:使用 `arrays.aslist()` 方法,但要注意原始类型数组的特殊情况(它们会被转换为一个包含数组的 list),并且返回的 list 是固定大小的,不能进行添加或删除元素的操作。
到此这篇关于java中list和数组互相转换的一些方法的文章就介绍到这了,更多相关java list和数组互相转换内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!
发表评论