golang 언어와 함께 제공되는 맵 구조는 매우 편리한 데이터 유형이지만 더 많은 효율성과 유연성이 필요한 데이터 작업의 경우 golang에서 구현된 해시맵을 사용하도록 선택할 수 있습니다. 이 기사에서는 golang이 해시맵을 구현하는 방법을 소개합니다.
1. 구현 원리
해시맵을 구현하는 Golang의 원리는 매우 간단합니다. 특정 알고리즘을 통해 키-값 쌍을 배열로 매핑하고 연결된 목록을 사용하여 해시 충돌을 해결하는 것입니다. 특히 해시맵을 구현하려면 다음 단계가 필요합니다.
2. 구현 코드
해시맵을 구현하기 위한 간단한 골랭 코드는 다음과 같습니다.
package hashmap import "sync" type Node struct { key string value interface{} next *Node } type HashMap struct { size int nodes []*Node mutex sync.Mutex } func NewHashMap(size int) *HashMap { return &HashMap{size, make([]*Node, size), sync.Mutex{}} } func (hm *HashMap) hash(key string) int { h := 0 for i := 0; i < len(key); i++ { h = (h << 5) + h + int(key[i]) } return h % hm.size } func (hm *HashMap) Set(key string, value interface{}) { hm.mutex.Lock() defer hm.mutex.Unlock() i := hm.hash(key) if hm.nodes[i] == nil { hm.nodes[i] = &Node{key, value, nil} } else { for n := hm.nodes[i]; n != nil; n = n.next { if n.key == key { n.value = value return } if n.next == nil { n.next = &Node{key, value, nil} break } } } } func (hm *HashMap) Get(key string) interface{} { hm.mutex.Lock() defer hm.mutex.Unlock() i := hm.hash(key) for n := hm.nodes[i]; n != nil; n = n.next { if n.key == key { return n.value } } return nil } func (hm *HashMap) Delete(key string) { hm.mutex.Lock() defer hm.mutex.Unlock() i := hm.hash(key) if hm.nodes[i] != nil { if hm.nodes[i].key == key { hm.nodes[i] = hm.nodes[i].next return } for n := hm.nodes[i]; n.next != nil; n = n.next { if n.next.key == key { n.next = n.next.next return } } } }
3. 사용 예
사용 예는 다음과 같습니다.
package main import ( "fmt" "hashmap" ) func main() { m := hashmap.NewHashMap(16) m.Set("apple", 1) m.Set("banana", 2) m.Set("cat", 3) fmt.Println(m.Get("apple")) // Output: 1 fmt.Println(m.Get("carrot")) // Output: <nil> m.Delete("banana") fmt.Println(m.Get("banana")) // Output: <nil> }
4. 요약
해시맵을 golang을 통해 구현하는 것이 편리할 수 있습니다. 효율적이고 유연한 데이터 운영. 해시맵을 구현하는 원리는 매우 간단합니다. 주로 해시 알고리즘을 통해 키-값 쌍을 배열에 매핑하고 연결 목록을 사용하여 해시 충돌을 해결합니다. 사용 예의 코드는 참고용으로 사용할 수 있으며, 필요에 따라 최적화하고 개선할 수도 있습니다.
위 내용은 golang에서 해시맵을 구현하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!