Skip to content

Commit 5750fe0

Browse files
authored
performance: Initialize capacity on copy (#51)
1 parent cc923df commit 5750fe0

File tree

3 files changed

+5
-9
lines changed

3 files changed

+5
-9
lines changed

orderedmap.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -109,7 +109,7 @@ func (m *OrderedMap) Back() *Element {
109109
// Copy returns a new OrderedMap with the same elements.
110110
// Using Copy while there are concurrent writes may mangle the result.
111111
func (m *OrderedMap) Copy() *OrderedMap {
112-
m2 := NewOrderedMap()
112+
m2 := NewOrderedMapWithCapacity(m.Len())
113113

114114
for el := m.Front(); el != nil; el = el.Next() {
115115
m2.Set(el.Key, el.Value)

v2/orderedmap.go

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -20,9 +20,7 @@ func NewOrderedMapWithCapacity[K comparable, V any](capacity int) *OrderedMap[K,
2020
}
2121

2222
func NewOrderedMapWithElements[K comparable, V any](els ...*Element[K, V]) *OrderedMap[K, V] {
23-
om := &OrderedMap[K, V]{
24-
kv: make(map[K]*Element[K, V], len(els)),
25-
}
23+
om := NewOrderedMapWithCapacity[K, V](len(els))
2624
for _, el := range els {
2725
om.Set(el.Key, el.Value)
2826
}
@@ -134,7 +132,7 @@ func (m *OrderedMap[K, V]) Back() *Element[K, V] {
134132
// Copy returns a new OrderedMap with the same elements.
135133
// Using Copy while there are concurrent writes may mangle the result.
136134
func (m *OrderedMap[K, V]) Copy() *OrderedMap[K, V] {
137-
m2 := NewOrderedMap[K, V]()
135+
m2 := NewOrderedMapWithCapacity[K, V](m.Len())
138136
for el := m.Front(); el != nil; el = el.Next() {
139137
m2.Set(el.Key, el.Value)
140138
}

v3/orderedmap.go

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -22,9 +22,7 @@ func NewOrderedMapWithCapacity[K comparable, V any](capacity int) *OrderedMap[K,
2222
}
2323

2424
func NewOrderedMapWithElements[K comparable, V any](els ...*Element[K, V]) *OrderedMap[K, V] {
25-
om := &OrderedMap[K, V]{
26-
kv: make(map[K]*Element[K, V], len(els)),
27-
}
25+
om := NewOrderedMapWithCapacity[K, V](len(els))
2826
for _, el := range els {
2927
om.Set(el.Key, el.Value)
3028
}
@@ -175,7 +173,7 @@ func (m *OrderedMap[K, V]) Back() *Element[K, V] {
175173
// Copy returns a new OrderedMap with the same elements.
176174
// Using Copy while there are concurrent writes may mangle the result.
177175
func (m *OrderedMap[K, V]) Copy() *OrderedMap[K, V] {
178-
m2 := NewOrderedMap[K, V]()
176+
m2 := NewOrderedMapWithCapacity[K, V](m.Len())
179177
for el := m.Front(); el != nil; el = el.Next() {
180178
m2.Set(el.Key, el.Value)
181179
}

0 commit comments

Comments
 (0)