返回

int[] 转 List 常见的问题与解决方案

后端


在编程中,我们经常需要将 int[] 转为 List,这是两个不同的数据类型,转换时需要注意一些常见问题。

问题:转换后取值异常


int[] arr = new int[]{1, 2, 3, 4, 5};
List<Integer> list = Arrays.asList(arr);
System.out.println(list.get(1)); // 报IndexOutOfBoundsException

这个代码中,我们将int数组arr转换为List后,尝试取第二个元素,即索引为1的元素。但是,运行代码会报IndexOutOfBoundsException异常,这是因为List和int[]有不同的索引机制。

int[]的索引从0开始,而List的索引从0开始,这意味着int数组arr的第二个元素对应List的第一个元素。因此,当我们尝试访问List的第二个元素时,就会报IndexOutOfBoundsException异常。

解决方案:使用正确索引


为了解决这个问题,我们需要使用正确的索引。int[]的索引从0开始,而List的索引从0开始。因此,当我们需要访问List的第二个元素时,应该使用索引1,而不是索引2。

int[] arr = new int[]{1, 2, 3, 4, 5};
List<Integer> list = Arrays.asList(arr);
System.out.println(list.get(0)); // 正确,打印2

问题:List不可变


另一个常见问题是,List是不可变的,这意味着我们无法修改List中的元素。如果我们尝试修改List中的元素,会报UnsupportedOperationException异常。

int[] arr = new int[]{1, 2, 3, 4, 5};
List<Integer> list = Arrays.asList(arr);
list.set(0, 10); // 报UnsupportedOperationException

解决方案:使用ArrayList


如果我们需要修改List中的元素,可以改用ArrayList。ArrayList是可变的,这意味着我们可以修改ArrayList中的元素。

int[] arr = new int[]{1, 2, 3, 4, 5};
ArrayList<Integer> list = new ArrayList<>(Arrays.asList(arr));
list.set(0, 10); // 正确,将第一个元素修改为10

结论


int[]转List时,需要注意两种数据类型的索引机制不同。int[]的索引从0开始,而List的索引从0开始。此外,List是不可变的,这意味着我们无法修改List中的元素。如果我们需要修改List中的元素,可以改用ArrayList

int[] 转 List 时,需要注意两种数据类型的索引机制不同,int[]的索引从0开始,而 List 的索引从 0 开始。此外,List 是不可变的,这意味着我们无法修改 List 中的元素。如果我们需要修改 List 中的元素,可以改用 ArrayList。