TGViewer
Android under the hood Android under the hood @android_under_the_hood · 1.53K subscribers
Post #120 4K
Что такое modCount в ArrayList'е?

Если внимательно присмотреться к исходникам ArrayList'а, можно увидеть инкрементирование переменной modCount при каждом изменении списка:

class ArrayList<E> {

private var modCount = 0

fun add(element: E) {
modCount++
...
}

fun remove(element: E) {
modCount++
...
}

fun clear() {
modCount++
...
}
}


Такая логика нужна для сохранения консистентности данных в случаях когда используются итераторы:

class ArrayListIterator<E> {

...

fun next(): E {
/*
modCount берется из оригинального ArrayList'а

expectModCount инициализируется при создании итератора значением modCount из оригинального ArrayList'a
*/
if (modCount != expectModCount) {
throw ConcurrentModificationException()
}
...
}
}


При создании итератора списка значение modCount сохраняется в переменную итератора expectModCount, если во время итерирования коллекции вы измените список ArrayList, переменная modCount инкрементируется и перестанет равняться переменной итератора expectModCount, в итоге следующий шаг итератора выбросит исключение ConcurrentModificationException.

Таким образом при итерировании коллекции гарантируется что ваши данные случайно не изменятся обходными путями и количество неявных багов будет сведено к минимуму.

P.S. Если вам нужно менять ArrayList во время итерирования делайте это через ListIterator, специальный итератор который умеет перемещаться в обеих направлениях и изменять список.

Пишите в комментах что думаете и всем хорошего кода!
  • 👍 29
  • 😁 3
More from @android_under_the_hood
  1. Oct 4, 2026Всем привет, хочу поделиться проектом, который запустил 1 октября — ЗдесьЯ. Это цифровая с…
  2. Oct 2, 2026Kotlin lambdas, часть I. До версии Kotlin 2.0 лямбды компилировались в анонимные классы, р…
  3. Sep 27, 2026Делегат свойства в Kotlin. В Kotlin есть конструкция, которой нет в JVM: var name by NameD…
  4. Sep 23, 2026val vs var под капотом. На уровне Kotlin все просто: val x = 10 var y = 20 y = 30 // компи…
  5. Sep 20, 2026Возвращение Прошло уже полгода с последней записи на канале. За это время в моей жизни про…
  6. Feb 5, 2026Пару фактов о Go, часть II. 4) Вместо Kotlin Nullability указатели как в С/C++, то есть об…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →