stdlib: Remove all occurrences in Collection.removeAll method

This commit is contained in:
Ilya Matveev
2017-04-13 16:52:18 +07:00
committed by ilmat192
parent 6549dda5fb
commit 26c227ab3e
3 changed files with 17 additions and 8 deletions
@@ -132,9 +132,12 @@ class ArrayList<E> private constructor(
override fun removeAll(elements: Collection<E>): Boolean {
var changed = false
val it = elements.iterator()
val it = iterator()
while (it.hasNext()) {
if (remove(it.next())) changed = true
if (elements.contains(it.next())) {
it.remove()
changed = true
}
}
return changed
}
@@ -422,11 +422,13 @@ class HashMap<K, V> private constructor(
internal fun removeAllEntries(elements: Collection<Map.Entry<K, V>>): Boolean {
if (elements.isEmpty()) return false
val it = elements.iterator()
val it = entriesIterator()
var updated = false
while (it.hasNext()) {
if (removeEntry(it.next()))
if (elements.contains(it.next())) {
it.remove()
updated = true
}
}
return updated
}
@@ -460,11 +462,13 @@ class HashMap<K, V> private constructor(
}
internal fun removeAllValues(elements: Collection<V>): Boolean {
val it = elements.iterator()
val it = valuesIterator()
var updated = false
while (it.hasNext()) {
if (removeValue(it.next()))
if (elements.contains(it.next())) {
it.remove()
updated = true
}
}
return updated
}
@@ -56,11 +56,13 @@ class HashSet<K> internal constructor(
}
override fun removeAll(elements: Collection<K>): Boolean {
val it = elements.iterator()
val it = iterator()
var updated = false
while (it.hasNext()) {
if (remove(it.next()))
if (elements.contains(it.next())) {
it.remove()
updated = true
}
}
return updated
}