Java如何实现类似Python arr[:N]的截取数组前N个元素功能
Java实现类似Python数组切片的无自定义循环方案
原生JDK实现(无需引入第三方依赖)
- 针对基础类型数组(如
int[]、String[])
使用java.util.Arrays.copyOfRange即可直接实现切片,示例代码:
import java.util.Arrays; int[] arr = {1, 2, 3, 4, 5}; // 参数说明:copyOfRange(原数组, 起始下标(包含), 结束下标(不包含)) int[] slicedArr = Arrays.copyOfRange(arr, 0, 3); // 输出结果为 [1,2,3]
- 针对
List集合
使用subList方法实现:
import java.util.Arrays; import java.util.List; List<Integer> list = Arrays.asList(1, 2, 3, 4, 5); List<Integer> slicedList = list.subList(0, 3); // 输出结果为 [1,2,3]
注意:
subList返回的是原List的视图,修改原List会同步影响切片结果,如果需要独立的新集合,可改为new ArrayList<>(list.subList(0, 3))
第三方工具包实现(简化操作,更贴合Python使用习惯)
如果项目中已经引入常用工具包,可以用更简洁的API:
- Apache Commons Lang 提供的
ArrayUtils:支持负下标,和Python切片逻辑更接近
import org.apache.commons.lang3.ArrayUtils; int[] arr = {1, 2, 3, 4, 5}; int[] slicedArr = ArrayUtils.subarray(arr, 0, 3); // 同样得到 [1,2,3] // 支持负下标,例如取倒数3个元素:ArrayUtils.subarray(arr, -3, arr.length)
- Guava 提供的基础类型工具类:
import com.google.common.primitives.Ints; int[] arr = {1, 2, 3, 4, 5}; List<Integer> slicedList = Ints.asList(arr).subList(0, 3);
以上所有方案都不需要手动编写循环逻辑,底层实现已经由JDK或工具包封装完成。
内容的提问来源于stack exchange,提问作者Sergi
相关产品推荐
相关产品推荐

