一 說明
map類型也被成爲字典類型,底層是哈希表 單個hashi值相同的話會形成鏈表,存儲多個值
二 快速定位的原因
1 先根據 哈希算法算出hash值得位置
2 具體值如果有多個,就再根據鏈表進行精確定位
三 限制
map 數據類型限制必須是可hash的對象,因爲本質就是根據hash表來實現的
本身是無序的,隨機順序存儲
key本身不能重複 value是可以的
key支持數據類型
- int
- float
- bool
- string
- array-1只能是數組,不能是其他類型2 數組類型嵌套類型也只能是支持的類型,不能是切片 map之類的,嵌套也會判斷 v15:=make(map[[2][]sting) 嵌套類型爲字符串切片 也是非法
- pointer(指針)
- struct-常用
- channel
- type 關鍵字 上述支持的類型 - 新定義的類型也是可以支持的
- 切片-MAP-FUNCTION是無法比較的
四 聲明
vars:=map[data_type]data_tye{"k":v} 聲明並初始化複製
vars:=make(map[data_type]data_type,容量) 聲明並開闢空間-可以直接使用,如果聲明瞭容量,就代表有容量的個數可以存放k-v
var vars make(map[data_type]data_type 只是聲明並不能直接使用
五 kv-操作
map1["name"] = "小明"
六 循環
for k,v:= range map1{ fmt.Println(key,v) }
七 判斷k-v是否存在
capital,ok := map1 ["status"]/ if(ok){ fmt.Println("status 是",capital) }else{ fmt.Println("status 不存在") } }
八 len()-長度計算
len()計算map計算的是map內的k-v的個數
十 map與結構退
type person struct{ #定義結構體 name string age int } var person_list=make(map[int]person,10) #定義一個map,值爲結構體 stu1:=person{"111",11}#先實例化一個對象 person_list[1]=stu1 # 直接賦值實例化對象 fmt.print(c[1]) #打印