64 lines
1.0 KiB
Go
64 lines
1.0 KiB
Go
package ds
|
|
|
|
type ArrayList[T any] struct {
|
|
values []T
|
|
}
|
|
|
|
var _ List[int] = &ArrayList[int]{}
|
|
|
|
func NewArrayList[T any](initCap int) *ArrayList[T] {
|
|
return &ArrayList[T]{make([]T, 0, initCap)}
|
|
}
|
|
|
|
func (s *ArrayList[T]) init() {
|
|
if s.values == nil {
|
|
s.values = make([]T, 0)
|
|
}
|
|
}
|
|
|
|
func (s *ArrayList[T]) Add(value T) {
|
|
s.init()
|
|
s.values = append(s.values, value)
|
|
}
|
|
|
|
func (s *ArrayList[T]) AddAll(values Iterable[T]) {
|
|
values.Each(s.Add)
|
|
}
|
|
|
|
func (s *ArrayList[T]) Get(index int) T {
|
|
s.init()
|
|
return s.values[index]
|
|
}
|
|
|
|
func (s *ArrayList[T]) Set(index int, value T) {
|
|
s.init()
|
|
s.values[index] = value
|
|
}
|
|
|
|
func (s *ArrayList[T]) RemoveAt(index int) T {
|
|
s.init()
|
|
ret := s.values[index]
|
|
s.values = append(s.values[:index], s.values[index+1:]...)
|
|
return ret
|
|
}
|
|
|
|
func (s *ArrayList[T]) Clear() {
|
|
s.values = make([]T, 0)
|
|
}
|
|
|
|
func (s *ArrayList[T]) Size() int {
|
|
s.init()
|
|
return len(s.values)
|
|
}
|
|
|
|
func (s *ArrayList[T]) Empty() bool {
|
|
return s.Size() == 0
|
|
}
|
|
|
|
func (s *ArrayList[T]) Each(f func(value T)) {
|
|
s.init()
|
|
for _, value := range s.values {
|
|
f(value)
|
|
}
|
|
}
|