Могу ли я сделать указатель на объект в List, чтобы даже при сортировке, изменении List, по ссылке я мог получить изначально указанный объект?
Asked
Active
Viewed 1,146 times
2 Answers
1
val list = mutableListOf("One", "Two", "Three")
val str = list[0]
list[0] = "Zero"
println(list) //[Zero, Two, Three]
println(str) //One
Элементарно :)
Eugene Krivenja
- 11,793
-
Я имел ввиду не копию объекта, а ссылку на него. Т.е в данном примере, я бы хотел получить str "Zero" – Aksenov Vladimir Mar 19 '18 at 16:09
-
Простите, а как понимать "получить изначально указанный объект"? – Eugene Krivenja Mar 19 '18 at 19:41
-
Я хочу получить изначально указанный объект, но что-то внутри объекта может измениться. Например у меня будет не строка, а какой-то класс. У меня все что угодно может внутри объекта поменяться и сам объект может куда угодно переместиться, но созданный мною указатель всеравно указывает на этот объект. А сейчас я создал просто копию – Aksenov Vladimir Mar 19 '18 at 20:00
-
1Вы пытаетесь какие-то паттерны из С или С++ сюда притянуть. Это как-то все звучит странно для JVM языка. – Eugene Krivenja Mar 19 '18 at 21:12
-
Поэтому я и задал вопрос могу ли я это сделать:) – Aksenov Vladimir Mar 19 '18 at 21:18
-
"объект может куда угодно переместиться" -- это для JVM уже другой обьект. Задайте лучше новый вопрос с кодом, который должен решать что вы хотите, посмотрим. – Eugene Krivenja Mar 19 '18 at 21:27
-
Хорошо. Спасибо! – Aksenov Vladimir Mar 19 '18 at 21:32
0
В kotlin для этого есть прекрасный метод - withIndex()
Достаточно применить его на коллекции и каждый её элемент станет IndexedValue. У него есть .value и .index, так что теперь как бы вы не перемещали этот объект, вы всегда сможете найти его по первоначальному индексу.
Код:
fun main() {
var list = listOf("One", "Two", "Zero").withIndex()
list = list.reversed()
println(list.find { it.index == 0 })
}
Вывод:
IndexedValue(index=0, value=One)
После изменения списка всё ещё с лёгкостью можно найти элемент, который изначально имел индекс [0], полагаю, что данное решение является тем самым указателем, о котором вы спрашивали.
Danil
- 98