ds/impl_list_array.go

64 lines
1.0 KiB
Go
Raw Normal View History

2023-01-20 21:48:46 +01:00
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
}
2023-01-20 21:48:46 +01:00
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)
}
}