fun main() { val numbersMap = mutableMapOf("one" to 1, "two" to 2, "three" to 3, "threeAgain" to 3) numbersMap.keys.remove("one") println(numbersMap) nubersMap.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 ![]() 如果是 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 ![]() |
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 ![]() @q13859601 #5 - 就是调用了 remove 方法, 那就是相当于 map.values().remove(), 直接去 LinkedHashMap 源码看好了. values() ![]() ![]() ![]() |
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 |