removeAt также удаляет элементы в переданном ArrayList - PullRequest
0 голосов
/ 06 августа 2020

Я никогда не видел этого

        @RequiresApi(Build.VERSION_CODES.LOLLIPOP)
        private fun eraseOldLocations() {
        val a: ArrayList<Ub> =myUbs
        val minTime: Long = (now- tenDaysago)
        val z = misUbs.size
        for(i in 0 until z){
            if( myUbs[i].time <minTime) {
                a.removeAt(i)
            }
        }
        myUbs = a
    }

каждый раз, когда условие выполняется, элемент в позиции i удаляется ... НО также из myUbs !!! myUbs - это объект publi c, поэтому при продолжении l oop появляется ошибка, потому что переменная i превышает размер myUbs ... Функция eraseOldLocations () должна удалять элементы с датой старше десяти дней a go. Почему это происходит?

1 Ответ

0 голосов
/ 06 августа 2020

Сделайте неглубокую копию myUbs, чтобы ссылки на список были разными и изменения не отражались друг на друге:

val a: MutableList<Ub> = myUbs.toMutableList()

MutableList по сути то же самое, но если вы хотите, чтобы ArrayList явно (хотя это не рекомендуется в Kotlin), вы можете вызвать конструктор ArrayList для делегирования указанной коллекции. То же самое и с мелкой копией:

val a: ArrayList<Ub> = ArrayList(myUbs)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...