This commit is contained in:
eson 2019-06-08 04:26:13 +08:00
parent 089acbcc34
commit d8142b0685

View File

@ -16,11 +16,10 @@ const (
listMaxLimit = uint(1) << 63 listMaxLimit = uint(1) << 63
listMinLimit = uint(8) listMinLimit = uint(8)
initCap = uint(8) initCap = uint(8)
growthFactor = float32(2.0) // growth by 100% //growthFactor = float32(2.0) // growth by 100%
shrinkFactor = float32(0.25) // shrink when size is 25% of capacity (0 means never shrink) //shrinkFactor = float32(0.25) // shrink when size is 25% of capacity (0 means never shrink)
) )
// New instantiates a new list and adds the passed values, if any, to the list
func New() *ArrayList { func New() *ArrayList {
l := &ArrayList{} l := &ArrayList{}
l.data = make([]interface{}, initCap, initCap) l.data = make([]interface{}, initCap, initCap)
@ -161,146 +160,25 @@ func (l *ArrayList) Remove(idx uint) (result interface{}, isfound bool) {
return return
} }
// func (list *ArrayList) Contains(values ...interface{}) bool { func (l *ArrayList) Contains(values ...interface{}) bool {
// for _, searchValue := range values { for _, searchValue := range values {
// found := false found := false
// for _, element := range list.data { for _, element := range l.data[l.hidx+1 : l.tidx] {
// if element == searchValue { if element == searchValue {
// found = true found = true
// break break
// } }
// } }
// if !found { if !found {
// return false return false
// } }
// } }
// return true return true
// } }
func (l *ArrayList) Values() []interface{} { func (l *ArrayList) Values() []interface{} {
newElements := make([]interface{}, l.size, l.size) newElements := make([]interface{}, l.size, l.size)
copy(newElements, l.data[l.hidx+1:l.tidx]) copy(newElements, l.data[l.hidx+1:l.tidx])
return newElements return newElements
} }
// func (list *ArrayList) IndexOf(value interface{}) int {
// if list.size == 0 {
// return -1
// }
// for index, element := range list.data {
// if element == value {
// return index
// }
// }
// return -1
// }
// func (list *ArrayList) Empty() bool {
// return list.size == 0
// }
// func (list *ArrayList) Size() int {
// return list.size
// }
// // Clear removes all elements from the list.
// func (list *ArrayList) Clear() {
// list.size = 0
// list.data = []interface{}{}
// }
// // Sort sorts values (in-place) using.
// func (list *ArrayList) Sort(comparator utils.Comparator) {
// if len(list.data) < 2 {
// return
// }
// utils.Sort(list.data[:list.size], comparator)
// }
// // Swap swaps the two values at the specified positions.
// func (list *ArrayList) Swap(i, j int) {
// if list.withinRange(i) && list.withinRange(j) {
// list.data[i], list.data[j] = list.data[j], list.data[i]
// }
// }
// // Insert inserts values at specified index position shifting the value at that position (if any) and any subsequent elements to the right.
// // Does not do anything if position is negative or bigger than list's size
// // Note: position equal to list's size is valid, i.e. append.
// func (list *ArrayList) Insert(index int, values ...interface{}) {
// if !list.withinRange(index) {
// // Append
// if index == list.size {
// list.Add(values...)
// }
// return
// }
// l := len(values)
// list.growBy(l)
// list.size += l
// copy(list.data[index+l:], list.data[index:list.size-l])
// copy(list.data[index:], values)
// }
// // Set the value at specified index
// // Does not do anything if position is negative or bigger than list's size
// // Note: position equal to list's size is valid, i.e. append.
// func (list *ArrayList) Set(index int, value interface{}) {
// if !list.withinRange(index) {
// // Append
// if index == list.size {
// list.Add(value)
// }
// return
// }
// list.data[index] = value
// }
// // String returns a string representation of container
// func (list *ArrayList) String() string {
// str := "ArrayList\n"
// values := []string{}
// for _, value := range list.data[:list.size] {
// values = append(values, fmt.Sprintf("%v", value))
// }
// str += strings.Join(values, ", ")
// return str
// }
// // Check that the index is within bounds of the list
// func (list *ArrayList) withinRange(index int) bool {
// return index >= 0 && index < list.size
// }
// func (list *ArrayList) resize(cap int) {
// newElements := make([]interface{}, cap, cap)
// copy(newElements, list.data)
// list.data = newElements
// }
// // Expand the array if necessary, i.e. capacity will be reached if we add n elements
// func (list *ArrayList) growBy(n int) {
// // When capacity is reached, grow by a factor of growthFactor and add number of elements
// currentCapacity := cap(list.data)
// if list.size+n >= currentCapacity {
// newCapacity := int(growthFactor * float32(currentCapacity+n))
// list.resize(newCapacity)
// }
// }
// // Shrink the array if necessary, i.e. when size is shrinkFactor percent of current capacity
// func (list *ArrayList) shrink() {
// if shrinkFactor == 0.0 {
// return
// }
// // Shrink when size is at shrinkFactor * capacity
// currentCapacity := cap(list.data)
// if list.size <= int(float32(currentCapacity)*shrinkFactor) {
// list.resize(list.size)
// }
// }