fun main() {
val numbersMap = mutableMapOf("one" to 1, "two" to 2, "three" to 3, "threeAgain" to 3)
numbersMap.keys.remove("one")
println(numbersMap)
numbersMap.values -= 3
println(numbersMap)
numbersMap.values.remove(3)
println(numbersMap)
}
对于numbersMap.values -= 3
这个-=
的运算符重载的源码在哪里呢,难道是 native 么
ide 里面点了半天都是 MutableCollection 的 minusAssign 方法,但是并不清楚这个内部的 values:MutableCollection 的-=的重写如何关联到 map 的 entry 的删除的
求大神指导:D
1
yuankui 2020-06-21 11:58:29 +08:00 1
如果是 mac,可以按住 cmd+鼠标左键单击"-=",可以到达方法的定义。
具体实现可以参考官方文档,extension method |
2
yuankui 2020-06-21 11:59:27 +08:00
|
3
q13859601 OP @yuankui 感谢帮助~
点进去看了也只是个接口定义,没有具体的实现类; 扩展方法和运算符重载也能理解,关键问题是,这个源码到底在哪里,通过 IDE 如何找到这个源码或者是文档怎么翻这个索引才能找到- -,我可能是懒吧,但是真的没办法像 java 一样 IDEA 里直接撸就能翻到。 |
4
ChenFanlin 2020-06-21 12:38:59 +08:00 1
|
5
q13859601 OP @ChenFanlin
嗯嗯 这个我也是可以看到的,但是这个是 MutableCollection.minusAssign,也就是说他是 values 的 minusAssign,调用的是 MutableCollection 接口的 remove 方法,我是想找到 LinkedHashMap 的 values 实现类的 remove 方法的实现,这里面应该有关联删除 map entry 的逻辑 |
6
ChenFanlin 2020-06-21 13:02:22 +08:00 1
@q13859601 #5
- 就是调用了 remove 方法, 那就是相当于 map.values().remove(), 直接去 LinkedHashMap 源码看好了. values() , AbstractCollection.remove() ,LinkedHashIterator.remove() |
7
q13859601 OP @ChenFanlin
明白了 感谢,实现实际是 jdk 的,而这个 values 里面存的是 node,感谢最终委托给了 HashMap 的 removeNode |
8
asd999cxcx 2022-01-21 10:11:30 +08:00
@ChenFanlin 可以偏题问下字体吗?
|
9
ChenFanlin 2022-01-24 21:48:12 +08:00
@asd999cxcx #8 是 Monaco
|