You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

开发Java数组管理库,Go语言是否有Java Arrays.copyOfRange等效实现?

Go语言中与Java Arrays.copyOfRange 等效的实现方案

嘿,刚好我对这个点挺熟悉的!Go语言里确实有和Java Arrays.copyOfRange 功能完全等效的实现,而且用法还挺灵活,我给你拆解下具体的实现方式:

核心实现思路

Java的Arrays.copyOfRange本质是复制原数组/集合指定索引范围的元素,返回一个独立的新数组,Go语言里可以通过切片的特性来实现这个需求,主要有两种常用方式:

方式一:copy 函数 + 切片截取

这种方式逻辑清晰,适合需要明确控制新切片创建的场景:

package main

import "fmt"

func main() {
    // 原切片(如果是数组的话,先转成切片:arr[:])
    src := []int{1, 2, 3, 4, 5}
    // 要复制的范围:[start, end),对应Java的from和to
    start, end := 1, 4

    // 创建一个长度等于目标范围长度的新切片
    dst := make([]int, end - start)
    // 复制指定范围的元素到新切片
    copy(dst, src[start:end])

    fmt.Println(dst) // 输出:[2 3 4]
    // 修改原切片不会影响新切片,说明是独立的复制
    src[2] = 100
    fmt.Println(dst) // 依然输出:[2 3 4]
}

方式二:append 函数简化写法

如果想要更简洁的代码,可以利用append的特性——当追加的元素超过切片容量时,Go会自动分配新的底层数组,从而实现独立复制:

package main

import "fmt"

func main() {
    src := []int{1, 2, 3, 4, 5}
    start, end := 1, 4

    // 用空切片作为起点,追加指定范围的元素,得到独立的新切片
    dst := append([]int(nil), src[start:end]...)

    fmt.Println(dst) // 输出:[2 3 4]
    src[2] = 100
    fmt.Println(dst) // 依然输出:[2 3 4]
}

注意事项

  • 切片截取的语法是slice[low:high],遵循左闭右开规则,和Java Arrays.copyOfRange的from(包含)、to(不包含)完全一致;
  • 如果原数据是Go的数组(而非切片),需要先将数组转换为切片(比如arr[:])再进行操作;
  • 当start等于end时,会返回空切片;如果start超过原切片长度或者end大于原切片长度,会触发panic,这和Java的ArrayIndexOutOfBoundsException行为一致。

内容的提问来源于stack exchange,提问作者Alvin Reyes

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 06:29:02