Skip to content

Instantly share code, notes, and snippets.

@crakaC
Created October 12, 2020 12:59
Show Gist options
  • Save crakaC/30ad422ecd92e096ede61d3fb227d8db to your computer and use it in GitHub Desktop.
Save crakaC/30ad422ecd92e096ede61d3fb227d8db to your computer and use it in GitHub Desktop.
KotlinのMapで特定のキーの範囲でループして場合によっては要素を削除するとき
val map = mutableMapOf<Int, Int>().toSortedMap()
//https://docs.oracle.com/javase/jp/8/docs/api/java/util/TreeMap.html#subMap-K-K-
val iterator = map.subMap(l, r).iterator()
while(iterator.hasNext()){
val it = iterator.next()
//do something
iterator.remove()
}
@crakaC
Copy link
Author

crakaC commented Oct 12, 2020

map.subMap()から取得したIteratorを操作して元のmapの要素が消えるのは直感的に気持ち悪さを感じるが、こうしないとjava.util.ConcurrentModificationExceptionで実行時に落ちる。

@crakaC
Copy link
Author

crakaC commented Oct 13, 2020

http://hg.openjdk.java.net/jdk8/jdk8/jdk/file/687fd7c7986d/src/share/classes/java/util/TreeMap.java
subMap()で取得できるMapが元のmapの参照を持っているのでいい感じに動作しているっぽい

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment