在Golang中,Java的ArrayList<E>相当于什么?

27

在我的特定使用情况下,我想知道以下Java代码将如何在Go中实现 -

class Channel {
    public String name;
    public Channel(){}
}

ArrayList<Channel> channels = new ArrayList<Channel>();

我已经开始了,我认为这是用于Go语言中的通道(Channel)的适当结构 -

struct Channel {
    name string
}

我只想知道在Go语言中如何使用ArrayList。

2个回答

46

使用切片:

var channels []Channel  // an empty list
channels = append(channels, Channel{name:"some channel name"})

另外,你的 Channel 声明略有偏差, 需要使用 'type' 关键字:

type Channel struct {
    name string
}

以下是一个完整的示例:http://play.golang.org/p/HnQ30wOftb

要获取更多信息,请查看切片文章

还有go tour(tour.golang.org)和语言规范(golang.org/ref/spec,参见#Slice_types,#Slices和#Appending_and_copying_slices)。


5
a = append(a[:i], a[i+1:]...) 的翻译是:将 a 中下标为 i 的元素删除,并将剩余部分重新组合成一个新的切片,最后赋值给变量 a - Mostafa
1
如果你只想从开头或结尾删除一个元素,那么更容易实现: a = a[1:] 或者 a = a[:len(a) - 2],Mostafa's 允许你从切片的中间删除一个元素。最棒的部分在于,这些情况下 append 不需要重新调整切片的大小,所以这只是就地修改。 - Jeremy Wall
3
如果您不关心列表的顺序,那么元素的删除可以是常数时间。从末尾取出元素,将其复制到要删除的元素索引处,然后将切片长度减少1即可。 - Evan Shaw
1
请参阅"Slice Tricks" wiki页面 - uriel
3
在 Golang 中,append() 方法是否像 ArrayList.add() 一样运行在摊销常数时间上? - Pinch
显示剩余2条评论

1

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接