{"id":375094,"date":"2024-05-21T06:16:06","date_gmt":"2024-05-21T06:16:06","guid":{"rendered":"http:\/\/savepearlharbor.com\/?p=375094"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-29T21:00:00","slug":"","status":"publish","type":"post","link":"https:\/\/savepearlharbor.com\/?p=375094","title":{"rendered":"<span>\u041d\u043e\u0432\u044b\u0435 \u043a\u043e\u043b\u043b\u0435\u043a\u0446\u0438\u0438 \u0432 Android<\/span>"},"content":{"rendered":"<div><!--[--><!--]--><\/div>\n<div id=\"post-content-body\">\n<div>\n<div class=\"article-formatted-body article-formatted-body article-formatted-body_version-2\">\n<div xmlns=\"http:\/\/www.w3.org\/1999\/xhtml\">\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w780q1\/getpro\/habr\/upload_files\/ed0\/e0e\/beb\/ed0e0ebeb59a5472c54c7ebaed240e72.jpg\" width=\"1024\" height=\"1024\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/ed0\/e0e\/beb\/ed0e0ebeb59a5472c54c7ebaed240e72.jpg\" data-blurred=\"true\"\/><\/figure>\n<p>\u0412 2018 \u0433\u043e\u0434\u0443 \u0432 androidx \u043f\u043e\u044f\u0432\u0438\u043b\u0441\u044f \u043d\u043e\u0432\u044b\u0439 \u043f\u0430\u043a\u0435\u0442 collection, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u043b \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0441\u043f\u0435\u0446\u0438\u0444\u0438\u0447\u043d\u044b\u0445 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440 \u0434\u0430\u043d\u043d\u044b\u0445, \u043f\u0435\u0440\u0435\u043f\u0438\u0441\u0430\u043d\u043d\u044b\u0445 \u043d\u0430 Kotlin, \u0442\u0430\u043a\u0438\u0445 \u043a\u0430\u043a <a href=\"https:\/\/developer.android.com\/reference\/androidx\/collection\/LongSparseArray\" rel=\"noopener noreferrer nofollow\">LongSparseArray<\/a>, <a href=\"https:\/\/developer.android.com\/reference\/androidx\/collection\/SimpleArrayMap\" rel=\"noopener noreferrer nofollow\">SimpleArrayMap<\/a> \u0438<strong> <\/strong><a href=\"https:\/\/developer.android.com\/reference\/androidx\/collection\/SparseArrayCompat\" rel=\"noopener noreferrer nofollow\">SparseArrayCompat<\/a>.<\/p>\n<p>\u041d\u0430 \u0442\u043e\u0442 \u043f\u0435\u0440\u0438\u043e\u0434 Kotlin \u0442\u043e\u043b\u044c\u043a\u043e \u043d\u0430\u0447\u0438\u043d\u0430\u043b \u043d\u0430\u0431\u0438\u0440\u0430\u0442\u044c \u043e\u0431\u043e\u0440\u043e\u0442\u044b \u0432 Android \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0435 \u0438 \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u043d\u043e\u0432\u044b\u0445 \u0431\u043e\u043b\u0435\u0435 \u044d\u0444\u0444\u0435\u043a\u0442\u0438\u0432\u043d\u044b\u0445 \u043a\u043e\u043b\u043b\u0435\u043a\u0446\u0438\u0439, \u043f\u043e\u043b\u043d\u043e\u0441\u0442\u044c\u044e \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u043d\u044b\u0445 \u043d\u0430 \u043d\u0451\u043c \u0431\u044b\u043b\u043e \u043e\u0434\u043d\u0438\u043c \u0438\u0437 \u0448\u0430\u0433\u043e\u0432 \u043f\u043e \u0432\u043d\u0435\u0434\u0440\u0435\u043d\u0438\u044e \u044f\u0437\u044b\u043a\u0430.<\/p>\n<p>\u0421 \u0442\u0435\u0445 \u043f\u043e\u0440 \u043f\u0440\u043e\u0448\u043b\u043e \u0431\u043e\u043b\u0435\u0435 6 \u043b\u0435\u0442 \u0438 \u0432 \u044f\u043d\u0432\u0430\u0440\u0435 \u0442\u0435\u043a\u0443\u0449\u0435\u0433\u043e \u0433\u043e\u0434\u0430 \u0431\u044b\u043b \u0432\u044b\u043f\u0443\u0449\u0435\u043d \u043d\u043e\u0432\u044b\u0439 \u0440\u0435\u043b\u0438\u0437 \u0441 \u043c\u043e\u0449\u043d\u043e\u0439 \u0437\u0430\u043c\u0435\u043d\u043e\u0439 <a href=\"https:\/\/docs.oracle.com\/javase\/8\/docs\/api\/java\/util\/HashMap.html\" rel=\"noopener noreferrer nofollow\">HashMap<\/a>, \u043e \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u044f \u0440\u0430\u0441\u0441\u043a\u0430\u0436\u0443 \u0447\u0443\u0442\u044c \u043f\u043e\u0437\u0436\u0435:<\/p>\n<pre><code class=\"kotlin\">dependencies {     implementation(\"androidx.collection:collection:1.4.0\") }<\/code><\/pre>\n<p>\u0421\u043f\u0438\u0441\u043e\u043a \u0440\u0435\u043b\u0438\u0437\u043e\u0432 \u0438 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0439 \u043c\u043e\u0436\u0435\u0442\u0435 \u0433\u043b\u044f\u043d\u0443\u0442\u044c \u043d\u0430 <a href=\"https:\/\/developer.android.com\/jetpack\/androidx\/releases\/collection\" rel=\"noopener noreferrer nofollow\">\u043e\u0444\u0438\u0446\u0438\u0430\u043b\u044c\u043d\u043e\u043c \u0441\u0430\u0439\u0442\u0435<\/a>.<\/p>\n<p>\u0417\u0430\u0447\u0435\u043c \u0432\u043e\u043e\u0431\u0449\u0435 \u043d\u0443\u0436\u043d\u043e \u0431\u044b\u043b\u043e \u0441\u0442\u0440\u043e\u0433\u0430\u0442\u044c \u043d\u043e\u0432\u044b\u0435 \u043a\u043e\u043b\u043b\u0435\u043a\u0446\u0438\u0438 \u0438 \u043f\u0435\u0440\u0435\u043f\u0438\u0441\u044b\u0432\u0430\u0442\u044c \u0441\u0442\u0430\u0440\u044b\u0435?<\/p>\n<p>\u041d\u0430 \u044d\u0442\u043e \u0435\u0441\u0442\u044c \u043a\u0430\u043a \u043c\u0438\u043d\u0438\u043c\u0443\u043c \u0442\u0440\u0438 \u043f\u0440\u0438\u0447\u0438\u043d\u044b:<\/p>\n<ol>\n<li>\n<p>\u042d\u0444\u0444\u0435\u043a\u0442\u0438\u0432\u043d\u044b\u0439 \u0440\u0430\u0441\u0445\u043e\u0434 \u043f\u0430\u043c\u044f\u0442\u0438 &#8212; \u0434\u0443\u043c\u0430\u044e \u043d\u0435 \u0441\u0435\u043a\u0440\u0435\u0442 \u0447\u0442\u043e \u0434\u0430\u0436\u0435 \u043f\u0440\u0438 \u043d\u0430\u043b\u0438\u0447\u0438\u0438 8Gb \u041e\u0417\u0423 \u043d\u0430 \u0432\u0430\u0448\u0435\u043c \u0442\u0435\u043b\u0435\u0444\u043e\u043d\u0435 \u043f\u0430\u043c\u044f\u0442\u044c \u043d\u0435 \u0431\u0435\u0441\u043a\u043e\u043d\u0435\u0447\u043d\u0430, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043d\u043e\u0432\u044b\u0435 \u043a\u043e\u043b\u043b\u0435\u043a\u0446\u0438\u0438 \u0431\u044b\u043b\u0438 \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u044b, \u043f\u0440\u0438\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u044f\u0441\u044c \u043f\u0440\u0438\u043d\u0446\u0438\u043f\u0430 &#171;\u043c\u0438\u043d\u0438\u043c\u0443\u043c \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u0432&#187;. <\/p>\n<\/li>\n<li>\n<p>\u042d\u0444\u0444\u0435\u043a\u0442\u0438\u0432\u043d\u0430\u044f \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u043e\u0432 &#8212; \u0441\u0442\u0430\u0440\u044b\u0435 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u043c\u043e\u0433\u0443\u0442 \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0442\u044c \u043d\u0435 \u043e\u0447\u0435\u043d\u044c \u044d\u0444\u0444\u0435\u043a\u0442\u0438\u0432\u043d\u044b\u0435 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u044b \u0438 \u0443\u0441\u0442\u0430\u0440\u0435\u0432\u0448\u0438\u0435 \u0440\u0435\u0448\u0435\u043d\u0438\u044f, \u0442\u0440\u0435\u0431\u0443\u044e\u0449\u0438\u0435 \u0440\u0435\u0444\u0430\u043a\u0442\u043e\u0440\u0438\u043d\u0433\u0430.<\/p>\n<\/li>\n<li>\n<p>Kotlin Multiplatform &#8212; \u043f\u0440\u0438 \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u0438\u0438 \u043e\u0431\u0449\u0435\u0433\u043e \u043a\u043e\u0434\u0430 \u043d\u0430 Kotlin \u043f\u043e\u0434 \u0440\u0430\u0437\u043d\u044b\u0435 \u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u044b \u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u043c\u0438\u043d\u0438\u043c\u0430\u043b\u044c\u043d\u043e\u0435 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0435\u0439 \u043e\u0442 \u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u0435\u043d\u043d\u044b\u0445 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440 \u0434\u0430\u043d\u043d\u044b\u0445, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440 \u0442\u0430\u043a\u0438\u0445 \u043a\u0430\u043a android.util.SparseArray.<\/p>\n<\/li>\n<\/ol>\n<p>\u0410 \u0442\u0435\u043f\u0435\u0440\u044c \u043f\u0435\u0440\u0435\u0439\u0434\u0451\u043c \u043a \u0441\u0430\u043c\u043e\u0439 \u0432\u043a\u0443\u0441\u043d\u043e\u0439 \u0447\u0430\u0441\u0442\u0438 \u0441\u0442\u0430\u0442\u044c\u0438, \u0440\u0430\u0437\u0431\u0435\u0440\u0451\u043c\u0441\u044f \u0447\u0442\u043e \u0437\u0430 \u043c\u0430\u0433\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u0448\u0442\u0443\u043a\u0438 \u043d\u0430\u043a\u043e\u043b\u0434\u043e\u0432\u0430\u043b\u0438 Google \u043a\u043e\u0434\u0435\u0440\u044b \u0438 \u0441\u0430\u043c\u043e\u0435 \u0433\u043b\u0430\u0432\u043d\u043e\u0435 \u043a\u0430\u043a \u043e\u043d\u0438 \u0440\u0430\u0431\u043e\u0442\u0430\u044e\u0442 \u043f\u043e\u0434 \u043a\u0430\u043f\u043e\u0442\u043e\u043c.<\/p>\n<p>\u041f\u043e\u043b\u0435\u0442\u0435\u043b\u0438!<\/p>\n<h2>\u0421\u043f\u0438\u0441\u043a\u0438 \u0438\u043b\u0438 \u0434\u0438\u043d\u0430\u043c\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u043c\u0430\u0441\u0441\u0438\u0432\u044b<\/h2>\n<p>\u0411\u044b\u043b\u043e \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u043e \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0439:<\/p>\n<pre><code class=\"kotlin\">\/\/ \u043e\u0431\u043e\u0431\u0449\u0451\u043d\u043d\u0430\u044f \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f val games = objectListOf(\"Atomic Heart\", \"BioShock\", \"Mafia II\") val movies = objectListOf(\"Dune: Part Two\", \"1 + 1\")  val moviesAndGames = mutableObjectListOf&lt;String>() \/\/ \u043f\u0435\u0440\u0435\u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0451\u043d\u043d\u044b\u0435 \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440\u044b plusAsssign moviesAndGames += movies moviesAndGames += games moviesAndGames += \"Far Cry 3\" moviesAndGames += \"The Shawshank Redemption\"  \/\/ \u0438\u0437\u043c\u0435\u043d\u044f\u0435\u043c\u0430\u044f \u0432\u0435\u0440\u0441\u0438\u044f mutableIntListOf() val fibonacciIntegerNumbers = intListOf(1, 1, 2, 3, 5)  \/\/ \u0438\u0437\u043c\u0435\u043d\u044f\u0435\u043c\u0430\u044f \u0432\u0435\u0440\u0441\u0438\u044f mutableLongListOf() val fibonacciLongNumbers = longListOf(1, 1, 2, 3, 5)  \/\/ \u0438\u0437\u043c\u0435\u043d\u044f\u0435\u043c\u0430\u044f \u0432\u0435\u0440\u0441\u0438\u044f mutableFloatListOf() val fibonacciFloatingNumbers = floatListOf(1f, 1f, 2f, 3f, 5f)  \/* P.S. \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u0434\u043b\u044f \u043f\u0440\u0438\u043c\u0438\u0442\u0438\u0432\u043d\u044b\u0445 \u0442\u0438\u043f\u043e\u0432 \u0431\u044b\u043b\u0438 \u0441\u043e\u0437\u0434\u0430\u043d\u044b \u043f\u043e\u0434 \u043a\u043e\u043f\u0438\u0440\u043a\u0443  \u043d\u0430 \u043e\u0441\u043d\u043e\u0432\u0435 \u043e\u0431\u043e\u0431\u0449\u0451\u043d\u043d\u043e\u0439 objectListOf() *\/<\/code><\/pre>\n<p>\u041f\u043e\u0434 \u043a\u0430\u043f\u043e\u0442\u043e\u043c \u043e\u0431\u044b\u0447\u043d\u044b\u0439 \u043c\u0430\u0441\u0441\u0438\u0432, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0443\u0432\u0435\u043b\u0438\u0447\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u0432 \u043f\u043e\u043b\u0442\u043e\u0440\u0430 \u0440\u0430\u0437\u0430 \u043f\u0440\u0438 \u043f\u0440\u0435\u0432\u044b\u0448\u0435\u043d\u0438\u0438 \u0440\u0430\u0437\u043c\u0435\u0440\u0430, \u0430 \u043f\u0440\u0438 \u0443\u0434\u0430\u043b\u0435\u043d\u0438\u0438 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439 \u0438\u0437 \u0441\u0435\u0440\u0435\u0434\u0438\u043d\u044b \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u0441\u0434\u0432\u0438\u0433 \u043c\u0430\u0441\u0441\u0438\u0432\u0430, \u043c\u043e\u0436\u043d\u043e \u0441\u043a\u0430\u0437\u0430\u0442\u044c \u0447\u0442\u043e \u044d\u0442\u043e \u0430\u043d\u0430\u043b\u043e\u0433\u0438\u044f <a href=\"https:\/\/docs.oracle.com\/javase\/8\/docs\/api\/java\/util\/ArrayList.html\" rel=\"noopener noreferrer nofollow\">ArrayList<\/a> \u0438\u0437 Java \u043c\u0438\u0440\u0430.<\/p>\n<p>\u041e\u0441\u043d\u043e\u0432\u043d\u044b\u0435 \u043f\u0440\u0435\u0438\u043c\u0443\u0449\u0435\u0441\u0442\u0432\u0430:<\/p>\n<ol>\n<li>\n<p>\u041c\u0435\u0442\u043e\u0434\u044b forEach, forEachIndexed \u0438 \u0430\u043d\u0430\u043b\u043e\u0433\u0438\u0447\u043d\u044b\u0435 \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043d\u044b \u0431\u0435\u0437 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u0438\u0442\u0435\u0440\u0430\u0442\u043e\u0440\u043e\u0432 + \u043e\u043d\u0438 \u043f\u043e\u043c\u0435\u0447\u0435\u043d\u044b \u043a\u043b\u044e\u0447\u0435\u0432\u044b\u043c \u0441\u043b\u043e\u0432\u043e\u043c inline \u0434\u043b\u044f \u0443\u043c\u0435\u043d\u044c\u0448\u0435\u043d\u0438\u044f \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0438 <a href=\"https:\/\/ru.wikipedia.org\/wiki\/%D0%A1%D1%82%D0%B5%D0%BA_%D0%B2%D1%8B%D0%B7%D0%BE%D0%B2%D0%BE%D0%B2\" rel=\"noopener noreferrer nofollow\">\u0441\u0442\u044d\u043a\u0430 \u0432\u044b\u0437\u043e\u0432\u043e\u0432<\/a>.<\/p>\n<\/li>\n<li>\n<p>\u0415\u0441\u0442\u044c \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0435 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u0434\u043b\u044f \u043f\u0440\u0438\u043c\u0438\u0442\u0438\u0432\u043d\u044b\u0445 \u0442\u0438\u043f\u043e\u0432 Int, Long \u0438 Float \u0431\u0435\u0437 <a href=\"https:\/\/docs.oracle.com\/javase\/tutorial\/java\/data\/autoboxing.html\" rel=\"noopener noreferrer nofollow\">autoboxing \/ unboxing<\/a> \u043c\u0435\u0445\u0430\u043d\u0438\u0437\u043c\u0430, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0445\u0430\u0440\u0430\u043a\u0442\u0435\u0440\u0435\u043d \u0434\u043b\u044f ArrayList&lt;Integer> \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440.<\/p>\n<\/li>\n<li>\n<p>\u041f\u0435\u0440\u0435\u0433\u0440\u0443\u0437\u043a\u0430 \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440\u043e\u0432 += \u0438 -= \u0434\u043b\u044f \u0431\u043e\u043b\u0435\u0435 \u043b\u0430\u043a\u043e\u043d\u0438\u0447\u043d\u043e\u0433\u043e \u043a\u043e\u0434\u0430, \u0442\u0430\u043a\u0436\u0435 \u043a\u043b\u0430\u0441\u0441\u044b \u043a\u043e\u043b\u043b\u0435\u043a\u0446\u0438\u0439 \u043f\u043e\u043c\u0435\u0447\u0435\u043d\u044b \u043a\u043b\u044e\u0447\u0435\u0432\u044b\u043c \u0441\u043b\u043e\u0432\u043e\u043c <a href=\"https:\/\/kotlinlang.org\/docs\/sealed-classes.html\" rel=\"noopener noreferrer nofollow\">sealed<\/a>, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0437\u0430 \u043f\u0440\u0435\u0434\u0435\u043b\u0430\u043c\u0438 androidx.collection \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 \u043d\u0435 \u0443\u0434\u0430\u0441\u0442\u0441\u044f \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u043d\u043e\u0432\u044b\u0445 \u043d\u0430\u0441\u043b\u0435\u0434\u043d\u0438\u043a\u043e\u0432 \u0438 \u043d\u0430\u0440\u0443\u0448\u0438\u0442\u044c \u0447\u0435\u0442\u043a\u043e \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0451\u043d\u043d\u0443\u044e \u043b\u043e\u0433\u0438\u043a\u0443.<\/p>\n<\/li>\n<\/ol>\n<p>\u0421\u0432\u043e\u0434\u043a\u0430 \u043a\u043b\u0430\u0441\u0441\u043e\u0432, \u0435\u0441\u043b\u0438 \u0437\u0430\u0445\u043e\u0442\u0438\u0442\u0435 \u0437\u0430\u043b\u0435\u0437\u0442\u044c \u0432 \u0438\u0441\u0445\u043e\u0434\u043d\u0438\u043a\u0438:<\/p>\n<ol>\n<li>\n<p><a href=\"https:\/\/developer.android.com\/reference\/androidx\/collection\/ObjectList\" rel=\"noopener noreferrer nofollow\">ObjectList<\/a> \/ <a href=\"https:\/\/developer.android.com\/reference\/androidx\/collection\/MutableObjectList\" rel=\"noopener noreferrer nofollow\">MutableObjectList<\/a> \u0434\u043b\u044f \u043e\u0431\u043e\u0431\u0449\u0435\u043d\u043d\u044b\u0445 \u0441\u043f\u0438\u0441\u043a\u043e\u0432<\/p>\n<\/li>\n<li>\n<p><a href=\"https:\/\/developer.android.com\/reference\/androidx\/collection\/IntList\" rel=\"noopener noreferrer nofollow\">IntList<\/a> \/ <a href=\"https:\/\/developer.android.com\/reference\/androidx\/collection\/MutableIntList\" rel=\"noopener noreferrer nofollow\">MutableIntList<\/a> \u0434\u043b\u044f \u043f\u0440\u0438\u043c\u0438\u0442\u0438\u0432\u043d\u043e\u0433\u043e \u0442\u0438\u043f\u0430 Int<\/p>\n<\/li>\n<li>\n<p><a href=\"https:\/\/developer.android.com\/reference\/androidx\/collection\/FloatList\" rel=\"noopener noreferrer nofollow\">FloatList<\/a> \/ <a href=\"https:\/\/developer.android.com\/reference\/androidx\/collection\/MutableFloatList\" rel=\"noopener noreferrer nofollow\">MutableFloatList<\/a> \u0434\u043b\u044f \u043f\u0440\u0438\u043c\u0438\u0442\u0438\u0432\u043d\u043e\u0433\u043e \u0442\u0438\u043f\u0430 Float<\/p>\n<\/li>\n<li>\n<p><a href=\"https:\/\/developer.android.com\/reference\/androidx\/collection\/LongList\" rel=\"noopener noreferrer nofollow\">LongList<\/a> \/ <a href=\"https:\/\/developer.android.com\/reference\/androidx\/collection\/MutableLongList\" rel=\"noopener noreferrer nofollow\">MutableLongList<\/a> \u0434\u043b\u044f \u043f\u0440\u0438\u043c\u0438\u0442\u0438\u0432\u043d\u043e\u0433\u043e \u0442\u0438\u043f\u0430 Long<\/p>\n<\/li>\n<\/ol>\n<h2>\u041f\u0430\u0440\u044b \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439 <\/h2>\n<p>\u0411\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430 androidx.collection \u0432\u043a\u043b\u044e\u0447\u0430\u0435\u0442 \u0442\u0440\u0438 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u043f\u0430\u0440 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439 \u0434\u043b\u044f \u043f\u0440\u0438\u043c\u0438\u0442\u0438\u0432\u043d\u044b\u0445 \u0442\u0438\u043f\u043e\u0432, \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e \u043d\u0430 \u043c\u043e\u043c\u0435\u043d\u0442 \u0447\u0442\u0435\u043d\u0438\u044f \u044d\u0442\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0438 \u0447\u0442\u043e-\u0442\u043e \u0438\u0437\u043c\u0435\u043d\u0438\u043b\u043e\u0441\u044c, \u043d\u043e \u0431\u0430\u0437\u043e\u0432\u044b\u0435 \u0438\u0434\u0435\u0438 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u0440\u0435\u0434\u043a\u043e \u043c\u0435\u043d\u044f\u044e\u0442\u0441\u044f.<\/p>\n<p>1. <a href=\"https:\/\/developer.android.com\/reference\/androidx\/collection\/IntIntPair\" rel=\"noopener noreferrer nofollow\">IntIntPair<\/a> \u0445\u0440\u0430\u043d\u0438\u0442 \u0434\u0432\u0430 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u0442\u0438\u043f\u0430 Int \u0432 \u0432\u0438\u0434\u0435 \u043e\u0434\u043d\u043e\u0433\u043e \u0447\u0438\u0441\u043b\u0430 Long \u0431\u043b\u0430\u0433\u043e\u0434\u0430\u0440\u044f \u043f\u0440\u043e\u0441\u0442\u0435\u0439\u0448\u0435\u0439 \u0431\u0438\u0442\u043e\u0432\u043e\u0439 \u043c\u0430\u0442\u0435\u043c\u0430\u0442\u0438\u043a\u0438: \u043f\u0435\u0440\u0432\u043e\u0435 \u0447\u0438\u0441\u043b\u043e \u0445\u0440\u0430\u043d\u0438\u0442\u0441\u044f \u0432 \u0441\u0442\u0430\u0440\u0448\u0438\u0445 32 \u0431\u0438\u0442\u0430\u0445 Long, \u0430 \u0432\u0442\u043e\u0440\u043e\u0435 \u0432 \u043c\u043b\u0430\u0434\u0448\u0438\u0445:<\/p>\n<pre><code class=\"kotlin\">@JvmInline value class IntIntPair(val packedValue: Long) {        constructor(first: Int, second: Int) : this(packInts(first, second))          \/\/ \u043f\u0435\u0440\u0432\u043e\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0445\u0440\u0430\u043d\u0438\u0442\u0441\u044f \u0432 \u0441\u0442\u0430\u0440\u0448\u0438\u0445 \u0431\u0438\u0442\u0430\u0445 \u0447\u0438\u0441\u043b\u0430 Long     val first: Int         get() = (packedValue shr 32).toInt()      \/\/ \u0432\u0442\u043e\u0440\u043e\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0445\u0440\u0430\u043d\u0438\u0442\u0441\u044f \u0432 \u043c\u043b\u0430\u0434\u0448\u0438\u0445 \u0431\u0438\u0442\u0430\u0445 \u0447\u0438\u0441\u043b\u0430 Long     val second: Int         get() = (packedValue and 0xFFFFFFFF).toInt() }  inline fun packInts(val1: Int, val2: Int): Long {     \/* \u0447\u0442\u043e\u0431\u044b \u043f\u043e\u043b\u043e\u0436\u0438\u0442\u044c \u0434\u0432\u0430 32-\u0431\u0438\u0442\u043d\u044b\u0445 \u0447\u0438\u0441\u043b\u0430 \u0432 \u043e\u0434\u043d\u043e 64-\u0431\u0438\u0442\u043d\u043e\u0435      \u043f\u0435\u0440\u0432\u043e\u0435 \u0447\u0438\u0441\u043b\u043e \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u0443\u0435\u043c \u043a 64-\u0431\u0438\u0442\u043d\u043e\u043c\u0443 \u0438 \u0434\u0435\u043b\u0430\u0435\u043c \u0441\u0434\u0432\u0438\u0433 \u0432\u043b\u0435\u0432\u043e \u043d\u0430 32 \u0431\u0438\u0442\u0430,      \u0432\u0442\u043e\u0440\u043e\u0435 \u0442\u0430\u043a\u0436\u0435 \u0440\u0430\u0441\u0448\u0438\u0440\u044f\u0435\u043c \u0434\u043e 64 \u0431\u0438\u0442 \u0441 \u0437\u0430\u043d\u0443\u043b\u0435\u043d\u0438\u0435\u043c \u0441\u0442\u0430\u0440\u0448\u0438\u0445 32 \u0431\u0438\u0442,      \u0435\u0441\u043b\u0438 \u0442\u0430\u043a\u0438\u0435 \u0441\u043b\u0443\u0447\u0430\u0439\u043d\u043e \u0442\u0430\u043c \u043e\u043a\u0430\u0437\u0430\u043b\u0438\u0441\u044c, \u043f\u043e\u0441\u043b\u0435 \u044d\u0442\u043e\u0433\u043e \u0441\u043e\u0432\u043c\u0435\u0449\u0430\u0435\u043c \u0431\u0438\u0442\u044b \u043e\u0431\u0435\u0438\u0445 \u0447\u0438\u0441\u0435\u043b      \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u043b\u043e\u0433\u0438\u0447\u0435\u0441\u043a\u043e\u0433\u043e OR *\/     return (val1.toLong() shl 32) or (val2.toLong() and 0xFFFFFFFF) }<\/code><\/pre>\n<p>\u041e\u0431\u0440\u0430\u0442\u0438\u0442\u0435 \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u0435, \u0447\u0442\u043e IntIntPair \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f <a href=\"https:\/\/kotlinlang.org\/docs\/inline-classes.html\" rel=\"noopener noreferrer nofollow\">inline value \u043a\u043b\u0430\u0441\u0441\u043e\u043c<\/a>, \u0430 \u044d\u0442\u043e \u0437\u043d\u0430\u0447\u0438\u0442 \u0447\u0442\u043e \u043f\u043e\u043b\u0435 <em>packedValue<\/em> \u0431\u0443\u0434\u0435\u0442 \u0432\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u0442\u044c\u0441\u044f \u0432 \u043c\u0435\u0441\u0442\u043e \u0432\u044b\u0437\u043e\u0432\u0430 \u0431\u0435\u0437 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u043e\u0431\u044a\u0435\u043a\u0442\u0430 \u043a\u043b\u0430\u0441\u0441\u0430, \u0447\u0442\u043e \u0438\u0437\u0431\u0430\u0432\u043b\u044f\u0435\u0442 <a href=\"https:\/\/ru.wikipedia.org\/wiki\/%D0%A1%D0%B1%D0%BE%D1%80%D0%BA%D0%B0_%D0%BC%D1%83%D1%81%D0%BE%D1%80%D0%B0\" rel=\"noopener noreferrer nofollow\">GC<\/a> \u043e\u0442 \u043d\u0435\u043d\u0443\u0436\u043d\u043e\u0439 \u0440\u0430\u0431\u043e\u0442\u044b.<\/p>\n<p>2. <a href=\"https:\/\/developer.android.com\/reference\/androidx\/collection\/FloatFloatPair\" rel=\"noopener noreferrer nofollow\">FloatFloatPair<\/a> \u0430\u043d\u0430\u043b\u043e\u0433\u0438\u0447\u043d\u043e IntIntPair \u0445\u0440\u0430\u043d\u0438\u0442 \u0434\u0432\u0430 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u0442\u0438\u043f\u0430 Float \u0432 \u043e\u0434\u043d\u043e\u043c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0438 \u0442\u0438\u043f\u0430 Long, \u043e\u0442\u043b\u0438\u0447\u0438\u0435 \u0437\u0430\u043a\u043b\u044e\u0447\u0430\u0435\u0442\u0441\u044f \u0442\u043e\u043b\u044c\u043a\u043e \u0432 \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0439 \u0442\u0440\u0430\u043d\u0441\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438 \u0447\u0438\u0441\u043b\u0430 Float \u0432 \u0431\u0438\u0442\u043e\u0432\u043e\u0435 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u0442\u0438\u043f\u0430 Int:<\/p>\n<pre><code class=\"kotlin\">\/* \u0441\u043d\u0430\u0447\u0430\u043b\u0430 \u0438\u0437\u0432\u043b\u0435\u043a\u0430\u0435\u0442\u0441\u044f \u0431\u0438\u0442\u043e\u0432\u043e\u0435 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u0442\u0438\u043f\u0430 Int \u0438\u0437 \u0441\u0442\u0430\u0440\u0448\u0438\u0445 32 \u0431\u0438\u0442 \u0447\u0438\u0441\u043b\u0430,  \u0437\u0430\u0442\u0435\u043c \u0442\u0440\u0430\u043d\u0441\u0444\u043e\u0440\u043c\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u0432\u043e Float \u0442\u0438\u043f *\/ inline val first: Float     get() = floatFromBits((packedValue shr 32).toInt())  \/* \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c \u0430\u043d\u0430\u043b\u043e\u0433\u0438\u0447\u0435\u043d \u0438\u0437\u0432\u043b\u0435\u0447\u0435\u043d\u0438\u044e \u043f\u0435\u0440\u0432\u043e\u0433\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f,  \u0442\u043e\u043b\u044c\u043a\u043e \u0431\u0438\u0442\u043e\u0432\u043e\u0435 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u0438\u0437\u0432\u043b\u0435\u043a\u0430\u0435\u0442\u0441\u044f \u0438\u0437 \u043c\u043b\u0430\u0434\u0448\u0438\u0445 32 \u0431\u0438\u0442 *\/ inline val second: Float     get() = floatFromBits((packedValue and 0xFFFFFFFF).toInt())  inline fun packFloats(val1: Float, val2: Float): Long {     \/* \u043f\u0440\u0435\u0432\u0440\u0430\u0449\u0430\u0435\u043c \u043a\u0430\u0436\u0434\u043e\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 Float \u0432 \u0431\u0438\u0442\u043e\u0432\u043e\u0435 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u0442\u0438\u043f\u0430 Int,      \u0434\u043b\u044f \u0434\u0430\u043b\u044c\u043d\u0435\u0439\u0448\u0438\u0445 \u0431\u0438\u0442\u043e\u0432\u044b\u0445 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0439 \u043f\u0435\u0440\u0435\u0432\u043e\u0434\u0438\u043c \u0432 Long *\/     val v1 = val1.toRawBits().toLong()     val v2 = val2.toRawBits().toLong()     \/\/ \u0442\u0430\u043a\u0436\u0435 \u043a\u0430\u043a \u0432 IntIntPair \u0437\u0430\u043f\u0430\u043a\u043e\u0432\u044b\u0432\u0430\u0435\u043c \u0434\u0432\u0430 \u0447\u0438\u0441\u043b\u0430 \u0442\u0438\u043f\u0430 Int \u0432 \u043e\u0434\u0438\u043d Long     return (v1 shl 32) or (v2 and 0xFFFFFFFF) }  inline fun floatFromBits(bits: Int): Float = java.lang.Float.intBitsToFloat(bits) inline fun Float.toRawBits(): Int = java.lang.Float.floatToRawIntBits(this)<\/code><\/pre>\n<p>\u0411\u043e\u043b\u0435\u0435 \u0434\u0435\u0442\u0430\u043b\u044c\u043d\u043e\u0435 \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u0430 \u043f\u0440\u0435\u0432\u0440\u0430\u0449\u0435\u043d\u0438\u044f \u0447\u0438\u0441\u043b\u0430 Float \u0432 \u0431\u0438\u0442\u043e\u0432\u043e\u0435 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u0435 Int \u0438 \u043e\u0431\u0440\u0430\u0442\u043d\u043e \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442\u0441\u044f \u0432 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u0438 \u043f\u043e \u043c\u0435\u0442\u043e\u0434\u0430\u043c <a href=\"https:\/\/docs.oracle.com\/javase%2F7%2Fdocs%2Fapi%2F%2F\/java\/lang\/Float.html#intBitsToFloat(int)\" rel=\"noopener noreferrer nofollow\">Float.intBitsToFloat<\/a> \u0438 <a href=\"https:\/\/docs.oracle.com\/javase%2F7%2Fdocs%2Fapi%2F%2F\/java\/lang\/Float.html#floatToRawIntBits(float)\" rel=\"noopener noreferrer nofollow\">Float.floatToRawIntBits<\/a>.<\/p>\n<p><em>3.<\/em> <a href=\"https:\/\/developer.android.com\/reference\/androidx\/collection\/LongLongPair\" rel=\"noopener noreferrer nofollow\">LongLongPair<\/a> &#8212; \u043f\u0440\u043e\u0441\u0442\u0435\u0439\u0448\u0430\u044f \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u0434\u043b\u044f \u0434\u0432\u0443\u0445 \u0447\u0438\u0441\u0435\u043b \u0442\u0438\u043f\u0430 Long:<\/p>\n<pre><code class=\"kotlin\">class LongLongPair(val first: Long, val second: Long) { ... }<\/code><\/pre>\n<p>\u0412\u044b\u0438\u0433\u0440\u044b\u0432\u0430\u0435\u0442 \u043f\u0435\u0440\u0435\u0434 <a href=\"https:\/\/developer.android.com\/reference\/android\/util\/Pair\" rel=\"noopener noreferrer nofollow\">Pair<\/a>&lt;Long, Long> \u0432 \u043f\u0430\u043c\u044f\u0442\u0438, \u0442\u0430\u043a \u043a\u0430\u043a \u0434\u043b\u044f \u0432\u0441\u0435\u0445 \u043e\u0431\u043e\u0431\u0449\u0435\u043d\u043d\u044b\u0445 \u0442\u0438\u043f\u043e\u0432 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442\u0441\u044f <a href=\"https:\/\/docs.oracle.com\/javase\/tutorial\/java\/data\/numberclasses.html\" rel=\"noopener noreferrer nofollow\">\u043a\u043b\u0430\u0441\u0441\u044b \u043e\u0431\u0435\u0440\u0442\u043a\u0438<\/a>, \u0430 \u043d\u0435 \u043f\u0440\u0438\u043c\u0438\u0442\u0438\u0432\u043d\u044b\u0435 \u0442\u0438\u043f\u044b.<\/p>\n<p>\u0412\u043e \u0432\u0441\u0435\u0445 \u0432\u044b\u0448\u0435\u043f\u0435\u0440\u0435\u0447\u0438\u0441\u043b\u0435\u043d\u043d\u044b\u0445 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f\u0445 \u043f\u0430\u0440 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439 \u0435\u0441\u0442\u044c \u043f\u0435\u0440\u0435\u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u0435 \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440\u043e\u0432 component1 \u0438 component2 \u0434\u043b\u044f \u043a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0439<a href=\"https:\/\/kotlinlang.org\/docs\/destructuring-declarations.html\" rel=\"noopener noreferrer nofollow\"> \u0434\u0435\u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0438\u0437\u0430\u0446\u0438\u0438<\/a>:<\/p>\n<pre><code class=\"kotlin\">val (firstInt, secondInt) = IntIntPair(3, 7) val (firstLong, secondLong) = LongLongPair(2021, 2023) val (firstFloat, secondFloat) = FloatFloatPair(0.33f, 0.45f)<\/code><\/pre>\n<h2>\u0425\u044d\u0448-\u0442\u0430\u0431\u043b\u0438\u0446\u044b<\/h2>\n<p>\u041d\u0430\u0441\u0442\u0430\u043b \u043c\u043e\u043c\u0435\u043d\u0442 \u0437\u0430\u0433\u043b\u044f\u043d\u0443\u0442\u044c \u0432 \u0441\u0430\u043c\u0443\u044e \u0441\u043b\u043e\u0436\u043d\u0443\u044e \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u0438\u0447\u0435\u0441\u043a\u0443\u044e \u0447\u0430\u0441\u0442\u044c \u044d\u0442\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0438, \u0433\u043e\u0442\u043e\u0432 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u0432\u0430\u043c, \u043d\u043e\u0432\u0430\u044f \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f <a href=\"https:\/\/docs.oracle.com\/javase\/8\/docs\/api\/java\/util\/HashMap.html\" rel=\"noopener noreferrer nofollow\">HashMap<\/a>:<\/p>\n<pre><code class=\"kotlin\">\/\/ \u043e\u0431\u043e\u0431\u0449\u0451\u043d\u043d\u044b\u0439 \u0432\u0430\u0440\u0438\u0430\u043d\u0442 \u0445\u044d\u0448-\u0442\u0430\u0431\u043b\u0438\u0446\u044b val scatterMap: ScatterMap&lt;String, String> = mutableScatterMapOf()  \/\/ \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u0445\u044d\u0448-\u0442\u0430\u0431\u043b\u0438\u0446 \u0434\u043b\u044f \u043f\u0440\u0438\u043c\u0438\u0442\u0438\u0432\u043d\u044b\u0445 \u0442\u0438\u043f\u043e\u0432, \u0430\u043d\u0430\u043b\u043e\u0433\u0438\u0447\u043d\u044b\u0435 \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u044b \u0435\u0441\u0442\u044c \u0434\u043b\u044f Long \u0438 Float intIntMapOf() intFloatMapOf() intLongMapOf() intObjectMapOf&lt;String>()  \/\/ \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u044b \u0434\u043b\u044f \u0441\u043b\u0443\u0447\u0430\u0435\u0432, \u043a\u043e\u0433\u0434\u0430 \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u043a\u043b\u044e\u0447\u0430 \u043e\u0434\u0438\u043d \u0438\u0437 \u043f\u0440\u0438\u043c\u0438\u0442\u0438\u0432\u043d\u044b\u0445 \u0442\u0438\u043f\u043e\u0432: Int, Long \u0438\u043b\u0438 Float intObjectMapOf&lt;String>() longObjectMapOf&lt;String>() floatObjectMapOf&lt;String>()  \/* P.S. \u043f\u043e\u0445\u043e\u0436\u0438\u0435 \u0448\u0442\u0443\u043a\u0438 \u043d\u0430 intIntMapOf(), intLongMapOf() \u0438 intObjectMapOf()  \u0435\u0441\u0442\u044c \u0432 android.util \u043f\u0430\u043a\u0435\u0442\u0435 - SparseIntArray, SparseLongArray  \u0438 SparseArray \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0435\u043d\u043d\u043e *\/<\/code><\/pre>\n<p>\u041f\u043e\u043b\u0430\u0433\u0430\u044e \u0432\u044b \u0443\u0436\u0435 \u0434\u043e\u0433\u0430\u0434\u0430\u043b\u0438\u0441\u044c, \u0447\u0442\u043e \u0432\u0441\u0435 \u044d\u0442\u0438 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u0431\u044b\u043b\u0438 \u0441\u043e\u0437\u0434\u0430\u043d\u044b, \u0442\u0430\u043a\u0436\u0435 \u043a\u0430\u043a \u0438 \u0440\u0430\u043d\u0435\u0435 \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0435\u043d\u043d\u044b\u0435 \u0441\u043f\u0438\u0441\u043a\u0438, \u043f\u043e\u0434 \u043a\u043e\u043f\u0438\u0440\u043a\u0443 \u043d\u0430 \u043e\u0441\u043d\u043e\u0432\u0435 \u043e\u0431\u043e\u0431\u0449\u0451\u043d\u043d\u043e\u0439 \u0432\u0435\u0440\u0441\u0438\u0438:<\/p>\n<pre><code class=\"kotlin\">sealed class ScatterMap&lt;K, V> {     \/\/ \u043c\u0435\u043d\u044f\u044e\u0442\u0441\u044f \u0431\u0443\u043a\u0432\u0430\u043b\u044c\u043d\u043e \u0442\u043e\u043b\u044c\u043a\u043e \u0442\u0438\u043f\u044b \u0434\u043b\u044f \u043c\u0430\u0441\u0441\u0438\u0432\u043e\u0432 \u043a\u043b\u044e\u0447\u0435\u0439 \u0438 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439     var keys: Array&lt;Any?> = EMPTY_OBJECTS     var values: Array&lt;Any?> = EMPTY_OBJECTS     \/\/ \u043e\u0441\u0442\u0430\u043b\u044c\u043d\u0430\u044f \u043b\u043e\u0433\u0438\u043a\u0430 \u043e\u0441\u0442\u0430\u0451\u0442\u0441\u044f \u043d\u0435\u0438\u0437\u043c\u0435\u043d\u043d\u043e\u0439 }  sealed class IntIntMap {     \/\/ \u0442\u0438\u043f\u044b \u0431\u044b\u043b\u0438 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u044b \u043d\u0430 \u043f\u0440\u0438\u043c\u0438\u0442\u0438\u0432\u043d\u044b\u0435     var keys: IntArray = EmptyIntArray     var values: IntArray = EmptyIntArray     \/\/ \u043b\u043e\u0433\u0438\u043a\u0430 \u0430\u0431\u0441\u043e\u043b\u044e\u0442\u043d\u043e \u043d\u0435 \u043f\u043e\u043c\u0435\u043d\u044f\u043b\u0430\u0441\u044c \u0438 \u0431\u044b\u043b\u0430 \u0441\u043a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u043d\u0430 \u0438\u0437 ScatterMap }  sealed class IntObjectMap&lt;V> {     \/\/ \u0442\u0430\u043a\u0430\u044f \u0436\u0435 \u0438\u0441\u0442\u043e\u0440\u0438\u044f...     var keys: IntArray = EmptyIntArray     var values: Array&lt;Any?> = EMPTY_OBJECTS }  \/* P.S. \u0422\u0430\u043a\u043e\u0439 \u043f\u043e\u0434\u0445\u043e\u0434 \u043c\u043e\u0436\u0435\u0442 \u043f\u043e\u043a\u0430\u0437\u0430\u0442\u044c\u0441\u044f \u0438\u0437\u0431\u044b\u0442\u043e\u0447\u043d\u044b\u043c \u0442\u0430\u043a \u043a\u0430\u043a  \u043e\u0434\u0438\u043d\u0430\u043a\u043e\u0432\u0430\u044f \u043b\u043e\u0433\u0438\u043a\u0430 \u043a\u043e\u043f\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u043f\u0440\u044f\u043c\u043e \u0432 \u043b\u043e\u0431, \u043d\u0430 \u0441\u0430\u043c\u043e\u043c \u0434\u0435\u043b\u0435 \u043e\u0441\u043e\u0431\u043e\u0433\u043e \u043f\u0440\u043e\u0438\u0433\u0440\u044b\u0448\u0430  \u0432 \u044d\u0442\u043e\u043c \u043d\u0435\u0442 \u0438 \u043b\u044e\u0431\u044b\u0435 \u043d\u0435\u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u044b\u0435 \u043a\u043b\u0430\u0441\u0441\u044b \u043b\u0435\u0433\u043a\u043e \u0432\u044b\u043f\u0438\u043b\u0438\u0432\u0430\u044e\u0442\u0441\u044f  \u0441\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u043c\u0438 \u0441\u0438\u0441\u0442\u0435\u043c\u0430\u043c\u0438 \u0441\u0431\u043e\u0440\u043a\u0438. *\/<\/code><\/pre>\n<p>\u0421\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u0432\u0437\u044f\u0442\u044c \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044e <a href=\"https:\/\/developer.android.com\/reference\/kotlin\/androidx\/collection\/ScatterMap\" rel=\"noopener noreferrer nofollow\">ScatterMap<\/a> \/ <a href=\"https:\/\/developer.android.com\/reference\/kotlin\/androidx\/collection\/MutableScatterMap\" rel=\"noopener noreferrer nofollow\">MutableScatterMap<\/a> \u0438 \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u0435\u0451 \u043f\u043e\u0434 \u043a\u0430\u043f\u043e\u0442\u043e\u043c, \u043b\u043e\u0433\u0438\u043a\u0430 \u043e\u0441\u0442\u0430\u043b\u044c\u043d\u044b\u0445 \u043d\u0438\u0447\u0435\u043c \u043d\u0435 \u0431\u0443\u0434\u0435\u0442 \u043e\u0442\u043b\u0438\u0447\u0430\u0442\u044c\u0441\u044f.<\/p>\n<p>\u041f\u0440\u0438\u0441\u0442\u0443\u043f\u0438\u043c \u043a \u0438\u0437\u0443\u0447\u0435\u043d\u0438\u044e!<\/p>\n<h4>\u041a\u0430\u043a ScatterMap \u0445\u0440\u0430\u043d\u0438\u0442 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044e \u043e \u043f\u0430\u0440\u0430\u0445 \u043a\u043b\u044e\u0447 \/ \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435<\/h4>\n<p>\u041c\u0435\u0445\u0430\u043d\u0438\u0437\u043c \u0445\u0440\u0430\u043d\u0435\u043d\u0438\u044f \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438 \u043e \u0437\u0430\u043f\u0438\u0441\u044f\u0445 \u043a\u043b\u044e\u0447 \/ \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u043e\u0442\u043b\u0438\u0447\u0430\u0435\u0442\u0441\u044f \u043e\u0442 HashMap, \u0433\u0434\u0435 \u0432\u0441\u0435 \u043b\u0435\u0436\u0438\u0442 \u0432 \u043e\u0434\u043d\u043e\u043c \u043c\u0430\u0441\u0441\u0438\u0432<\/p>\n<p>\u0435 Map.Entry \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u0432, \u0432 ScatterMap \u0434\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0439 \u043c\u0430\u0441\u0441\u0438\u0432 \u043c\u0435\u0442\u0430\u0434\u0430\u043d\u043d\u044b\u0445:<\/p>\n<pre><code class=\"kotlin\">internal var metadata: LongArray = EmptyGroup<\/code><\/pre>\n<p>\u0433\u0434\u0435 \u0435\u0434\u0438\u043d\u0438\u0446\u0435\u0439 \u0445\u0440\u0430\u043d\u0438\u043c\u043e\u0439 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f 8 \u0431\u0438\u0442, \u043a\u043e\u0442\u043e\u0440\u044b\u043c\u0438 \u043c\u043e\u0436\u043d\u043e \u0441\u043e\u0445\u0440\u0430\u043d\u0438\u0442\u044c \u043e\u0434\u043d\u043e \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u0440\u043e\u0432\u043d\u043e \u0434\u043b\u044f \u043e\u0434\u043d\u043e\u0439 \u0437\u0430\u043f\u0438\u0441\u0438 \u0445\u044d\u0448-\u0442\u0430\u0431\u043b\u0438\u0446\u044b.<\/p>\n<p>\u0421\u043f\u0438\u0441\u043e\u043a \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u044b\u0445 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0439 \u0438 \u0438\u0445 8-\u043c\u0438 \u0431\u0438\u0442\u043e\u0432\u0430\u044f \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c:<\/p>\n<ol>\n<li>\n<p>\u041f\u0443\u0441\u0442\u043e\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 &#8212; 10000000<\/p>\n<\/li>\n<li>\n<p>\u041a\u043e\u043d\u0435\u0446 \u0442\u0430\u0431\u043b\u0438\u0446\u044b &#8212; 11111111, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u043f\u0440\u0438 \u0438\u0442\u0435\u0440\u0430\u0446\u0438\u0438 \u043f\u043e \u0442\u0430\u0431\u043b\u0438\u0446\u0435, \u0447\u0442\u043e\u0431\u044b \u043e\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c\u0441\u044f \u043d\u0430 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0435\u0439 \u0437\u0430\u043f\u0438\u0441\u0438<\/p>\n<\/li>\n<li>\n<p>\u0423\u0434\u0430\u043b\u0451\u043d\u043d\u043e\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 &#8212; 11111110<\/p>\n<\/li>\n<li>\n<p>\u0417\u0430\u043f\u043e\u043b\u043d\u0435\u043d\u043d\u043e\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 &#8212; \u0445\u0440\u0430\u043d\u0438\u0442 \u043c\u043b\u0430\u0434\u0448\u0438\u0435 7 \u0431\u0438\u0442 \u0445\u044d\u0448\u0430 \u043a\u043b\u044e\u0447\u0430, \u0432\u0435\u0440\u043d\u0451\u043c\u0441\u044f \u043a \u044d\u0442\u043e\u043c\u0443 \u0447\u0443\u0442\u044c \u043f\u043e\u0437\u0436\u0435<\/p>\n<\/li>\n<\/ol>\n<p>\u0414\u0443\u043c\u0430\u044e \u043d\u0435 \u0441\u0435\u043a\u0440\u0435\u0442, \u0447\u0442\u043e Long \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f 64 \u0431\u0438\u0442\u043d\u044b\u043c \u0447\u0438\u0441\u043b\u043e\u043c \u0438 \u0431\u044b\u043b\u043e \u0431\u044b \u043f\u0435\u0447\u0430\u043b\u044c\u043d\u043e \u0445\u0440\u0430\u043d\u0438\u0442\u044c \u0432 \u043d\u0451\u043c \u0442\u043e\u043b\u044c\u043a\u043e 8 \u0431\u0438\u0442, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0431\u044b\u043b\u0430 \u0432\u0432\u0435\u0434\u0435\u043d\u0430 \u043a\u043e\u043d\u0446\u0435\u043f\u0446\u0438\u044f \u0433\u0440\u0443\u043f\u043f\u044b:<\/p>\n<p><em>\u0413\u0440\u0443\u043f\u043f\u0430 &#8212; \u043d\u0430\u0431\u043e\u0440 \u0438\u0437 8-\u043c\u0438 \u0431\u0438\u0442\u043d\u044b\u0445 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0439 \u0438\u043b\u0438 \u0441\u043b\u043e\u0442\u043e\u0432, \u043a\u0430\u043a \u044d\u0442\u043e \u043f\u0440\u0438\u043d\u044f\u0442\u043e \u0432 \u0442\u0435\u0440\u043c\u0438\u043d\u043e\u043b\u043e\u0433\u0438\u0438 ScatterMap, \u0432 \u0434\u0430\u043d\u043d\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u044d\u0442\u043e \u0447\u0438\u0441\u043b\u043e Long, \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u043c\u043e\u0436\u0435\u0442 \u0445\u0440\u0430\u043d\u0438\u0442\u044c 8 \u0441\u043b\u043e\u0442\u043e\u0432, \u0430 \u044d\u0442\u043e \u0437\u043d\u0430\u0447\u0438\u0442 \u0447\u0442\u043e \u0440\u0430\u0437\u043c\u0435\u0440 \u0433\u0440\u0443\u043f\u043f\u044b \u0440\u0430\u0432\u0435\u043d 8.<\/em><\/p>\n<p>\u0415\u0441\u0442\u044c \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u044b\u0439 \u043c\u043e\u043c\u0435\u043d\u0442 \u043d\u0430\u0441\u0447\u0435\u0442 \u0433\u0440\u0443\u043f\u043f \u0432 \u0438\u0441\u0445\u043e\u0434\u043d\u043e\u043c \u043a\u043e\u0434\u0435 ScatterMap:<\/p>\n<pre><code class=\"kotlin\">\/\/ \u0440\u0430\u0437\u043c\u0435\u0440 \u0433\u0440\u0443\u043f\u043f\u044b, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043c\u044b \u0443\u0436\u0435 \u0432\u044b\u0447\u0438\u0441\u043b\u0438\u043b\u0438 const val GroupWidth = 8  \/* \u043f\u0440\u0438 \u0447\u0442\u0435\u043d\u0438\u0438 \u043a\u043e\u0434\u0430 \u0441\u043b\u043e\u0436\u043d\u043e \u0431\u044b\u043b\u043e \u0430\u0431\u0441\u0442\u0440\u0430\u0433\u0438\u0440\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u043e\u0442 \u0447\u0438\u0441\u043b\u0430 Long \u0438\u0437-\u0437\u0430  \u0431\u0438\u0442\u043e\u0432\u043e\u0439 \u0430\u0440\u0438\u0444\u043c\u0435\u0442\u0438\u043a\u0438, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u044d\u0442\u043e\u0442 typealias \u043d\u0438 \u0440\u0430\u0437 \u043c\u0435\u043d\u044f \u0441\u0431\u0438\u0432\u0430\u043b \u0441 \u0442\u043e\u043b\u043a\u0443 *\/ typealias Group = Long<\/code><\/pre>\n<p>\u041f\u0440\u0438 \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u043c \u043f\u0440\u043e\u0445\u043e\u0434\u0435 \u043f\u043e \u043c\u0430\u0441\u0441\u0438\u0432\u0443 \u043c\u0435\u0442\u0430\u0434\u0430\u043d\u043d\u044b\u0445 \u0437\u0430 \u043e\u0434\u043d\u0443 \u0438\u0442\u0435\u0440\u0430\u0446\u0438\u044e \u043e\u0431\u044b\u0447\u043d\u043e \u0438\u0437\u0432\u043b\u0435\u043a\u0430\u0435\u0442\u0441\u044f \u043e\u0434\u043d\u0430 \u0433\u0440\u0443\u043f\u043f\u0430, \u0442\u043e \u0435\u0441\u0442\u044c \u0447\u0438\u0441\u043b\u043e \u0442\u0438\u043f\u0430 Long, \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u043d\u0435 \u0432\u0441\u0435\u0433\u0434\u0430 \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u043e \u043f\u043e \u0435\u0434\u0438\u043d\u043e\u043c\u0443 \u0438\u043d\u0434\u0435\u043a\u0441\u0443 \u0438\u0437-\u0437\u0430 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u0441\u043c\u0435\u0449\u0435\u043d\u0438\u044f, \u043e \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u0440\u0435\u0447\u044c \u043f\u043e\u0439\u0434\u0451\u0442 \u043d\u0438\u0436\u0435.<\/p>\n<h4>\u041c\u0435\u0442\u043e\u0434 \u043f\u043e\u0438\u0441\u043a\u0430 \u0438\u043d\u0434\u0435\u043a\u0441\u0430 \u043a\u043b\u044e\u0447\u0430<\/h4>\n<p>\u0414\u043b\u044f \u0431\u043e\u043b\u0435\u0435 \u0433\u043b\u0443\u0431\u043e\u043a\u043e\u0433\u043e \u043f\u043e\u043d\u0438\u043c\u0430\u043d\u0438\u044f \u043a\u0430\u043a \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 ScatterMap \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u0439 \u043c\u0435\u0442\u043e\u0434 \u0434\u043b\u044f \u043f\u043e\u0438\u0441\u043a\u0430 \u0438\u043d\u0434\u0435\u043a\u0441\u0430:<\/p>\n<pre><code class=\"kotlin\">\/* \u043c\u0435\u0442\u043e\u0434 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u0438\u043d\u0434\u0435\u043a\u0441 \u043a\u043b\u044e\u0447\u0430, \u043f\u043e \u043a\u043e\u0442\u043e\u0440\u043e\u043c\u0443 \u0442\u0430\u043a\u0436\u0435 \u043c\u043e\u0436\u043d\u043e \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435,  \u0442\u0430\u043a \u043a\u0430\u043a \u043c\u0430\u0441\u0441\u0438\u0432\u044b keys \u0438 values \u0441\u043e\u043f\u043e\u0441\u0442\u0430\u0432\u0438\u043c\u044b \u043f\u043e \u0438\u043d\u0434\u0435\u043a\u0441\u0430\u043c *\/ inline fun findKeyIndex(key: K): Int {     \/\/ \u0445\u044d\u0448-\u0444\u0443\u043d\u043a\u0446\u0438\u044f \u0431\u0443\u0434\u0435\u0442 \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0435\u043d\u0430 \u043d\u0438\u0436\u0435     val hash = hash(key)     \/* \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u043c \u043c\u043b\u0430\u0434\u0448\u0438\u0435 7 \u0431\u0438\u0442 \u0445\u044d\u0448\u0430, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442\u0441\u044f      \u0434\u043b\u044f \u043f\u043e\u0438\u0441\u043a\u0430 \u043d\u0443\u0436\u043d\u043e\u0433\u043e \u0441\u043b\u043e\u0442\u0430 \u0432 \u043c\u0430\u0441\u0441\u0438\u0432\u0435 \u043c\u0435\u0442\u0430\u0434\u0430\u043d\u043d\u044b\u0445 *\/     val hash2 = h2(hash)      \/* \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u043c\u0430\u0441\u043a\u0438 \u0434\u043b\u044f \u0432\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u044f \u0441\u043c\u0435\u0449\u0435\u043d\u0438\u044f \u0431\u0443\u0434\u0435\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f      \u0440\u0430\u0437\u043c\u0435\u0440 \u0445\u044d\u0448-\u0442\u0430\u0431\u043b\u0438\u0446\u044b *\/      val probeMask = _capacity     \/\/ \u0431\u0435\u0440\u0451\u043c \u0441\u0442\u0430\u0440\u0448\u0438\u0435 25 \u0431\u0438\u0442\u0430 \u0445\u044d\u0448\u0430 \u0438 \u0440\u0430\u0441\u0441\u0447\u0438\u0442\u044b\u0432\u0430\u0435\u043c \u0441\u043c\u0435\u0449\u0435\u043d\u0438\u0435 \u043d\u0430 \u043e\u0441\u043d\u043e\u0432\u0435 \u043c\u0430\u0441\u043a\u0438     var probeOffset = h1(hash) and probeMask     var probeIndex = 0      while (true) {         \/* \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u043c \u0433\u0440\u0443\u043f\u043f\u0443 \u043f\u043e \u0441\u043c\u0435\u0449\u0435\u043d\u0438\u044e, \u044d\u0442\u043e \u043d\u0435 \u0441\u043e\u0432\u0441\u0435\u043c \u0442\u0440\u0438\u0432\u0438\u0430\u043b\u044c\u043d\u044b\u0439 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c,          \u0442\u0430\u043a \u043a\u0430\u043a \u0441\u043c\u0435\u0449\u0435\u043d\u0438\u0435 \u043d\u0435 \u0432\u0441\u0435\u0433\u0434\u0430 \u043a\u0440\u0430\u0442\u043d\u043e \u0447\u0438\u0441\u043b\u0443 8, \u0432 \u0442\u0430\u043a\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u0447\u0430\u0441\u0442\u044c \u0431\u0430\u0439\u0442\u043e\u0432 \u0431\u0435\u0440\u0451\u0442\u0441\u044f \u0438\u0437 \u043e\u0434\u043d\u043e\u0433\u043e \u0447\u0438\u0441\u043b\u0430 Long,          \u0434\u0440\u0443\u0433\u0430\u044f \u0438\u0437 \u0434\u0440\u0443\u0433\u043e\u0433\u043e, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440 \u0434\u043b\u044f \u043c\u0430\u0441\u0441\u0438\u0432\u0430 metadata, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0441\u043e\u0441\u0442\u043e\u0438\u0442 \u0438\u0437 Long0 \u0438 Long1          \u0433\u0440\u0443\u043f\u043f\u0430 \u043f\u043e \u0441\u043c\u0435\u0449\u0435\u043d\u0438\u044e 1 \u0431\u0443\u0434\u0435\u0442 \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0442\u044c 7 \u0441\u0442\u0430\u0440\u0448\u0438\u0445 \u0431\u0430\u0439\u0442\u043e\u0432 \u0438\u0437 Long0 \u0438 1 \u043c\u043b\u0430\u0434\u0448\u0438\u0439 \u0431\u0430\u0439\u0442 \u0438\u0437 Long1 *\/         val g = group(metadata, probeOffset)         \/* \u0438\u0449\u0435\u043c \u0432 \u0433\u0440\u0443\u043f\u043f\u0435 \u043d\u0443\u0436\u043d\u044b\u0439 \u0441\u043b\u043e\u0442 (\u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u0437\u0430\u043f\u0438\u0441\u0438 \u043a\u043b\u044e\u0447 \/ \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435),          \u0440\u0430\u043d\u0435\u0435 \u044f \u0443\u0436\u0435 \u043f\u0440\u0438\u0432\u043e\u0434\u0438\u043b 4 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u044b\u0445 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u044f \u0438 \u0442\u0430\u043c \u0431\u044b\u043b\u043e \u0443\u043a\u0430\u0437\u0430\u043d\u043e          \u0447\u0442\u043e \u0432 \u0441\u043b\u0443\u0447\u0430\u0435 \u0437\u0430\u043f\u043e\u043b\u043d\u0435\u043d\u043d\u043e\u0433\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u0441\u043b\u043e\u0442 \u0434\u043e\u043b\u0436\u0435\u043d \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0442\u044c \u043c\u043b\u0430\u0434\u0448\u0438\u0435 7 \u0431\u0438\u0442 \u0445\u044d\u0448\u0430 \u043a\u043b\u044e\u0447\u0430 *\/         var m = g.match(hash2)         \/\/ \u0435\u0441\u043b\u0438 \u043d\u0443\u0436\u043d\u044b\u0439 \u0441\u043b\u043e\u0442 \u0431\u044b\u043b \u043d\u0430\u0439\u0434\u0435\u043d \u043f\u0440\u044b\u0433\u0430\u0435\u043c \u0432 \u0446\u0438\u043a\u043b         while (m.hasNext()) {             \/* \u0432 \u043e\u0442\u043b\u0438\u0447\u0438\u0438 \u043e\u0442 HashMap, \u0433\u0434\u0435 \u0432 \u0441\u043b\u0443\u0447\u0430\u0435 \u0441\u043e\u0432\u043f\u0430\u0434\u0435\u043d\u0438\u044f \u0445\u044d\u0448\u0435\u0439              \u0443 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u0438\u0445 \u043a\u043b\u044e\u0447\u0435\u0439 \u0441\u043e\u0437\u0434\u0430\u0451\u0442\u0441\u044f \u0441\u0432\u044f\u0437\u0430\u043d\u043d\u044b\u0439 \u0441\u043f\u0438\u0441\u043e\u043a, \u0432 ScatterMap \u0434\u043b\u044f \u044d\u0442\u043e\u0433\u043e              \u0431\u044b\u043b \u0432\u0432\u0435\u0434\u0451\u043d \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u044c\u043d\u044b\u0439 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c (quadratic probing), \u0441\u0443\u0442\u044c \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u0441\u043e\u0441\u0442\u043e\u0438\u0442 \u0432 \u0442\u043e\u043c,              \u0447\u0442\u043e \u043f\u0440\u0438 \u0441\u043e\u0432\u043f\u0430\u0434\u0435\u043d\u0438\u0438 \u0445\u044d\u0448\u0435\u0439 \u0432\u044b\u0447\u0438\u0441\u043b\u044f\u0435\u0442\u0441\u044f \u043d\u043e\u0432\u044b\u0439 \u0438\u043d\u0434\u0435\u043a\u0441 \u0443\u043c\u043d\u043e\u0436\u0435\u043d\u0438\u0435\u043c \u0442\u0435\u043a\u0443\u0449\u0435\u0433\u043e \u043d\u0430 \u0441\u0442\u0435\u043f\u0435\u043d\u044c \u0434\u0432\u043e\u0439\u043a\u0438,              \u0435\u0441\u043b\u0438 \u0442\u0430\u043c \u0443\u0436\u0435 \u0435\u0441\u0442\u044c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0432\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u0435 \u0431\u0443\u0434\u0435\u0442 \u043f\u0440\u043e\u0434\u043e\u043b\u0436\u0430\u0442\u044c\u0441\u044f \u0434\u043e \u0442\u0435\u0445 \u043f\u043e\u0440 \u043f\u043e\u043a\u0430 \u043d\u0435 \u043d\u0430\u0439\u0434\u0435\u0442\u0441\u044f \u043f\u0443\u0441\u0442\u043e\u0435 \u043c\u0435\u0441\u0442\u0435\u0447\u043a\u043e *\/             val index = (probeOffset + m.get()) and probeMask             \/\/ \u0440\u0435\u0430\u043b\u044c\u043d\u043e\u0435 \u0441\u043e\u0432\u043f\u0430\u0434\u0435\u043d\u0438\u0435 \u043a\u043b\u044e\u0447\u0430 \u043e\u0437\u043d\u0430\u0447\u0430\u0435\u0442 \u0440\u0430\u0432\u0435\u043d\u0441\u0442\u0432\u043e \u0434\u0432\u0443\u0445 \u043c\u0435\u0442\u043e\u0434\u043e\u0432 hashCode() \u0438 equals(), \u043d\u0438\u043a\u043e\u0433\u0434\u0430 \u043d\u0435 \u0437\u0430\u0431\u044b\u0432\u0430\u0439\u0442\u0435 \u043e\u0431 \u044d\u0442\u043e\u043c             if (keys[index] == key) {                 return index             }             m = m.next()         }         \/\/ \u0435\u0441\u043b\u0438 \u0442\u0430\u043a\u043e\u0433\u043e \u0445\u044d\u0448\u0430 \u043d\u0435\u0442 \u0432 \u0433\u0440\u0443\u043f\u043f\u0435, \u0437\u043d\u0430\u0447\u0438\u0442 \u043a\u043b\u044e\u0447 \u043d\u0435 \u0431\u044b\u043b \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d \u0432 \u0445\u044d\u0448-\u0442\u0430\u0431\u043b\u0438\u0446\u0443         if (g.maskEmpty() != 0L) {             break         }          probeIndex += GroupWidth         probeOffset = (probeOffset + probeIndex) and probeMask     }      return -1 }<\/code><\/pre>\n<p>\u041e\u0431\u043e\u0431\u0449\u0430\u044f \u0432\u0441\u0451 \u0432\u044b\u0448\u0435\u0441\u043a\u0430\u0437\u0430\u043d\u043d\u043e\u0435 \u043c\u043e\u0436\u043d\u043e \u0441\u043a\u0430\u0437\u0430\u0442\u044c, \u0447\u0442\u043e \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u0439 \u043c\u0435\u0445\u0430\u043d\u0438\u0437\u043c \u0440\u0430\u0431\u043e\u0442\u044b ScatterMap \u043e\u0441\u043d\u043e\u0432\u0430\u043d \u043d\u0430 \u0445\u0440\u0430\u043d\u0435\u043d\u0438\u0438 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u044f (\u0441\u043b\u043e\u0442\u0430) \u0437\u0430\u043f\u0438\u0441\u0438 \u043a\u043b\u044e\u0447 \/ \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0432 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e\u043c \u043c\u0430\u0441\u0441\u0438\u0432\u0435 metadata \u0442\u0438\u043f\u0430 Long, \u0434\u043e\u0441\u0442\u0443\u043f \u043a \u043a\u043e\u0442\u043e\u0440\u043e\u043c\u0443 \u043e\u0441\u043d\u043e\u0432\u0430\u043d \u043d\u0430 \u0431\u0438\u0442\u043e\u0432\u043e\u0439 \u0430\u0440\u0438\u0444\u043c\u0435\u0442\u0438\u043a\u0435, \u0430 \u0434\u043b\u044f \u0440\u0435\u0448\u0435\u043d\u0438\u044f \u043a\u043e\u043b\u043b\u0438\u0437\u0438\u0439 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c <a href=\"https:\/\/en.wikipedia.org\/wiki\/Quadratic_probing\" rel=\"noopener noreferrer nofollow\">quadratic probing<\/a>, \u043e\u0441\u043d\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u043d\u0430 \u0432\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u0438 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0433\u043e \u0441\u0432\u043e\u0431\u043e\u0434\u043d\u043e\u0433\u043e \u0438\u043d\u0434\u0435\u043a\u0441\u0430 \u0432 \u043c\u0430\u0441\u0441\u0438\u0432\u0435.<\/p>\n<h4>\u0425\u044d\u0448-\u0444\u0443\u043d\u043a\u0446\u0438\u044f \u0438 \u0438\u0442\u043e\u0433\u0438<\/h4>\n<p>\u0422\u0435\u043f\u0435\u0440\u044c \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u0445\u044d\u0448-\u0444\u0443\u043d\u043a\u0446\u0438\u044e:<\/p>\n<pre><code class=\"kotlin\">inline fun hash(k: Any?): Int {     \/\/ \u043a\u043e\u043d\u0441\u0442\u0430\u043d\u0442\u0430 MurmurHashC1 \u0431\u044b\u043b\u0430 \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0430 \u0434\u043b\u044f \u0441\u043e\u043a\u0440\u0430\u0449\u0435\u043d\u0438\u044f \u043a\u043e\u043b\u043b\u0438\u0437\u0438\u0439     val hash = k.hashCode() * MurmurHashC1     \/* \u043a \u0441\u0442\u0430\u0440\u0448\u0438\u043c \u0431\u0438\u0442\u0430\u043c \u043f\u043e\u0434\u043c\u0435\u0448\u0438\u0432\u0430\u044e\u0442\u0441\u044f \u043c\u043b\u0430\u0434\u0448\u0438\u0435 \u0434\u043b\u044f \u0431\u043e\u043b\u0435\u0435      \u044d\u0444\u0444\u0435\u043a\u0442\u0438\u0432\u043d\u043e\u0439 \u0440\u0430\u0431\u043e\u0442\u044b \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u0430 quadratic probing *\/     return hash xor (hash shl 16) }  \/\/ \u043a\u043e\u043d\u0441\u0442\u0430\u043d\u0442\u0430 \u0431\u044b\u043b\u0430 \u0432\u0437\u044f\u0442\u0430 \u0438\u0437 MurmurHash \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u0430:  \/\/ https:\/\/en.wikipedia.org\/wiki\/MurmurHash#Algorithm const val MurmurHashC1: Int = 0xcc9e2d51.toInt()<\/code><\/pre>\n<p>\u0425\u043e\u0447\u0443 \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c, \u0435\u0441\u043b\u0438 \u043d\u0435 \u043f\u0440\u043e\u0433\u043e\u0432\u043e\u0440\u0438\u043b \u044d\u0442\u043e \u044f\u0432\u043d\u043e, \u0432\u0441\u0435 \u0434\u0430\u043d\u043d\u044b\u0435: \u043a\u043b\u044e\u0447\u0438 \u0438 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u043b\u0435\u0436\u0430\u0442 \u0432 \u0434\u0432\u0443\u0445 \u043c\u0430\u0441\u0441\u0438\u0432\u0430\u0445 keys \u0438 values \u0431\u0435\u0437 \u043a\u0430\u043a\u043e\u0439-\u043b\u0438\u0431\u043e \u0432\u043b\u043e\u0436\u0435\u043d\u043d\u043e\u0441\u0442\u0438 \u043a\u0430\u043a \u044d\u0442\u043e \u0431\u044b\u043b\u043e \u0432 HashMap, \u0433\u0434\u0435 Map.Entry \u043c\u043e\u0433 \u0431\u044b\u0442\u044c \u0443\u0437\u043b\u043e\u043c \u0441\u0432\u044f\u0437\u0430\u043d\u043d\u043e\u0433\u043e \u0441\u043f\u0438\u0441\u043a\u0430 \u0438\u043b\u0438 \u0434\u0435\u0440\u0435\u0432\u0430. <\/p>\n<p>\u0418\u0442\u043e\u0433\u043e\u0432\u044b\u0435 \u0437\u0430\u043c\u0435\u0447\u0430\u043d\u0438\u044f:<\/p>\n<ol>\n<li>\n<p>\u0412\u0441\u0435 \u043e\u0441\u0442\u0430\u043b\u044c\u043d\u044b\u0435 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0438: \u0432\u0441\u0442\u0430\u0432\u043a\u0430 \u0438 \u0443\u0434\u0430\u043b\u0435\u043d\u0438\u0435 \u0440\u0430\u0431\u043e\u0442\u0430\u044e\u0442 \u043f\u0440\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u0442\u0430\u043a\u0436\u0435, \u043a\u0430\u043a \u0438 \u043c\u0435\u0442\u043e\u0434 \u043f\u043e\u0438\u0441\u043a\u0430 \u0438\u043d\u0434\u0435\u043a\u0441\u0430 \u043a\u043b\u044e\u0447\u0430 \u0441 \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u043e\u0439 \u043b\u0438\u0448\u044c \u0440\u0430\u0437\u043d\u0438\u0446\u0435\u0439: \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u043d\u0435 \u0442\u043e\u043b\u044c\u043a\u043e \u0447\u0442\u0435\u043d\u0438\u0435 \u043c\u0430\u0441\u0441\u0438\u0432\u043e\u0432 metadata, keys \u0438 values \u043d\u043e \u0438 \u0437\u0430\u043f\u0438\u0441\u044c \u043d\u043e\u0432\u043e\u0433\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u043b\u0438\u0431\u043e \u0435\u0433\u043e \u0437\u0430\u043d\u0443\u043b\u0435\u043d\u0438\u0435 + \u043f\u0440\u0438 \u043f\u0440\u0435\u0432\u044b\u0448\u0435\u043d\u0438\u0438 \u0440\u0430\u0437\u043c\u0435\u0440\u0430 \u0445\u044d\u0448-\u0442\u0430\u0431\u043b\u0438\u0446\u044b \u0440\u0430\u0437\u043c\u0435\u0440\u044b \u043c\u0430\u0441\u0441\u0438\u0432\u043e\u0432 \u0443\u0432\u0435\u043b\u0438\u0447\u0438\u0432\u0430\u044e\u0442\u0441\u044f.<\/p>\n<\/li>\n<li>\n<p>ScatterMap \u043d\u0435 \u0441\u043e\u0445\u0440\u0430\u043d\u044f\u0435\u0442 \u043f\u043e\u0440\u044f\u0434\u043e\u043a \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u043d\u043e\u0432\u044b\u0445 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439, \u043a\u0430\u043a \u044d\u0442\u043e \u0434\u0435\u043b\u0430\u0435\u0442 <a href=\"https:\/\/docs.oracle.com\/javase\/8\/docs\/api\/java\/util\/LinkedHashMap.html\" rel=\"noopener noreferrer nofollow\">LinkedHashMap<\/a> \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440.<\/p>\n<\/li>\n<li>\n<p>forEach, forEachIndexed \u0442\u0430\u043a\u0436\u0435 \u043a\u0430\u043a \u0438 \u0432 \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0438\u0445 \u043a\u043e\u043b\u043b\u0435\u043a\u0446\u0438\u044f\u0445 \u044f\u0432\u043b\u044f\u044e\u0442\u0441\u044f inline \u0444\u0443\u043d\u043a\u0446\u0438\u044f\u043c\u0438 \u0438 \u0440\u0430\u0431\u043e\u0442\u0430\u044e\u0442 \u0431\u0435\u0437 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u0438\u0442\u0435\u0440\u0430\u0442\u043e\u0440\u043e\u0432.<\/p>\n<\/li>\n<\/ol>\n<h4>\u041c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u0430<\/h4>\n<p>\u0420\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u043f\u0440\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u0442\u0430\u043a\u0430\u044f \u0436\u0435 \u043a\u0430\u043a \u0443 \u0445\u044d\u0448-\u0442\u0430\u0431\u043b\u0438\u0446, \u0442\u043e\u043b\u044c\u043a\u043e \u0432\u043c\u0435\u0441\u0442\u043e \u0434\u0432\u0443\u0445 \u043c\u0430\u0441\u0441\u0438\u0432\u043e\u0432 keys \u0438 values \u043f\u043e\u0434 \u043a\u0430\u043f\u043e\u0442\u043e\u043c \u043b\u0435\u0436\u0438\u0442 \u043e\u0434\u0438\u043d:<\/p>\n<pre><code class=\"kotlin\">sealed class ScatterSet&lt;E> {      \/\/ \u0432\u0441\u044f \u0431\u0438\u0442\u043e\u0432\u0430\u044f \u0430\u0440\u0438\u0444\u043c\u0435\u0442\u0438\u043a\u0430 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0439 (\u0441\u043b\u043e\u0442\u043e\u0432) \u0430\u0431\u0441\u043e\u043b\u044e\u0442\u043d\u0430 \u0442\u0430\u043a\u0430\u044f \u0436\u0435 \u043a\u0430\u043a \u0443 ScatterMap     var metadata: LongArray = EmptyGroup       \/\/ \u043c\u0435\u043d\u044f\u0435\u0442\u0441\u044f \u0442\u043e\u043b\u044c\u043a\u043e \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u043c\u0430\u0441\u0441\u0438\u0432\u043e\u0432, \u0442\u0430\u043a \u043a\u0430\u043a \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u0443 \u043d\u0435 \u043d\u0443\u0436\u043d\u044b \u043a\u043b\u044e\u0447\u0438     var elements: Array&lt;Any?> = EMPTY_OBJECTS  }<\/code><\/pre>\n<p>\u0414\u0430\u043d\u043d\u0430\u044f \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u0442\u0430\u043a\u0436\u0435 \u043a\u0430\u043a \u0438 ScatterMap \u043d\u0435 \u0441\u043e\u0445\u0440\u0430\u043d\u044f\u0435\u0442 \u043f\u043e\u0440\u044f\u0434\u043a\u0430 \u043f\u0440\u0438 \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u0438 \u043d\u043e\u0432\u044b\u0445 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439.<\/p>\n<p>\u041f\u0440\u0438\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u044f\u0441\u044c \u043a\u0430\u043d\u043e\u043d\u0443 \u043f\u043e\u0441\u0442\u0440\u043e\u0435\u043d\u0438\u044f \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440 \u0434\u0430\u043d\u043d\u044b\u0445 \u0434\u043b\u044f \u043f\u0440\u0438\u043c\u0438\u0442\u0438\u0432\u043d\u044b\u0445 \u0442\u0438\u043f\u043e\u0432 \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u043c \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0435 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438:<\/p>\n<pre><code class=\"kotlin\">\/\/ \u043e\u0431\u043e\u0431\u0449\u0451\u043d\u043d\u0430\u044f \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f scatterSetOf&lt;String>() mutableScatterSetOf&lt;String>()  \/* \u0430\u043d\u0430\u043b\u043e\u0433\u0438\u0447\u043d\u043e \u0441\u043f\u0438\u0441\u043a\u0430\u043c \u0438 \u0445\u044d\u0448-\u0442\u0430\u0431\u043b\u0438\u0446\u0430\u043c \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438  \u0434\u043b\u044f \u043f\u0440\u0438\u043c\u0438\u0442\u0438\u0432\u043d\u044b\u0445 \u0442\u0438\u043f\u043e\u0432 \u0441\u0434\u0435\u043b\u0430\u043d\u044b \u043f\u043e\u0434 \u043a\u043e\u043f\u0438\u0440\u043a\u0443 *\/ intSetOf() mutableIntSetOf()  longSetOf() mutableLongSetOf()  floatSetOf() mutableFloatSetOf()<\/code><\/pre>\n<h2>\u0414\u0440\u0443\u0433\u0438\u0435 \u043a\u043e\u043b\u043b\u0435\u043a\u0446\u0438\u0438<\/h2>\n<p>\u041a\u0440\u0430\u0442\u043a\u043e \u043f\u0440\u043e\u0431\u0435\u0433\u0443\u0441\u044c \u043f\u043e \u043e\u0441\u0442\u0430\u0432\u0448\u0438\u043c\u0441\u044f \u043a\u043e\u043b\u043b\u0435\u043a\u0446\u0438\u044f\u043c \u0438\u0437 androidx.collection \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438:<\/p>\n<ol>\n<li>\n<p><a href=\"https:\/\/developer.android.com\/reference\/kotlin\/androidx\/collection\/SparseArrayCompat\" rel=\"noopener noreferrer nofollow\">SparseArrayCompat<\/a>, <a href=\"https:\/\/developer.android.com\/reference\/kotlin\/androidx\/collection\/LongSparseArray\" rel=\"noopener noreferrer nofollow\">LongSparseArray<\/a>, <a href=\"https:\/\/developer.android.com\/reference\/kotlin\/androidx\/collection\/SimpleArrayMap\" rel=\"noopener noreferrer nofollow\">SimpleArrayMap<\/a>, <a href=\"https:\/\/developer.android.com\/reference\/kotlin\/androidx\/collection\/ArraySet\" rel=\"noopener noreferrer nofollow\">ArraySet<\/a> \u0438 <a href=\"https:\/\/developer.android.com\/reference\/kotlin\/androidx\/collection\/LruCache\" rel=\"noopener noreferrer nofollow\">LruCache<\/a> &#8212; \u043f\u0435\u0440\u0435\u043f\u0438\u0441\u0430\u043d\u043d\u044b\u0435 \u0432\u0435\u0440\u0441\u0438\u0438 \u0438\u0437 android.util \u043f\u0430\u043a\u0435\u0442\u0430 \u043d\u0430 Kotlin \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e \u0441 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u043c\u0438 \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u044f\u043c\u0438.<\/p>\n<\/li>\n<li>\n<p><a href=\"https:\/\/developer.android.com\/reference\/kotlin\/androidx\/collection\/CircularArray\" rel=\"noopener noreferrer nofollow\">CircularArray<\/a> \u0438 <a href=\"https:\/\/developer.android.com\/reference\/kotlin\/androidx\/collection\/CircularIntArray\" rel=\"noopener noreferrer nofollow\">CircularIntArray<\/a> &#8212; \u0434\u0438\u043d\u0430\u043c\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u043c\u0430\u0441\u0441\u0438\u0432\u044b \u0441 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c\u044e \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0432 \u043d\u0430\u0447\u0430\u043b\u043e \u0438 \u0432 \u043a\u043e\u043d\u0435\u0446 \u0437\u0430 O(1) \u0432\u0440\u0435\u043c\u044f, \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u043e\u0441\u043d\u043e\u0432\u0430\u043d\u0430 \u043d\u0430 \u0434\u0432\u0443\u0445 \u0438\u043d\u0434\u0435\u043a\u0441\u0430\u0445 head \u0438 tail, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043f\u0435\u0440\u0435\u043c\u0435\u0449\u0430\u044e\u0442\u0441\u044f \u043f\u043e \u043c\u0430\u0441\u0441\u0438\u0432\u0443 \u0432 \u043f\u0440\u043e\u0442\u0438\u0432\u043e\u043f\u043e\u043b\u043e\u0436\u043d\u044b\u0445 \u043d\u0430\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f\u0445: \u043f\u0435\u0440\u0432\u044b\u0439 \u0443\u043c\u0435\u043d\u044c\u0448\u0430\u0435\u0442\u0441\u044f, \u0430 \u0432\u0442\u043e\u0440\u043e\u0439 \u0443\u0432\u0435\u043b\u0438\u0447\u0438\u0432\u0430\u0435\u0442\u0441\u044f, \u043f\u0440\u0438 \u0441\u043e\u0432\u043f\u0430\u0434\u0435\u043d\u0438\u0438 \u0438\u043d\u0434\u0435\u043a\u0441\u043e\u0432 \u043c\u0430\u0441\u0441\u0438\u0432 \u0443\u0434\u0432\u0430\u0438\u0432\u0430\u0435\u0442\u0441\u044f.<\/p>\n<\/li>\n<\/ol>\n<h2>\u0417\u0430\u043c\u0435\u0440\u044b<\/h2>\n<p>\u0421\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u0435 \u043a\u043e\u043b\u043b\u0435\u043a\u0446\u0438\u0439 \u0441 \u0430\u043d\u0430\u043b\u043e\u0433\u0430\u043c\u0438 \u0438\u0437 Java \u043c\u0438\u0440\u0430 \u043f\u043e \u043e\u0431\u044a\u0451\u043c\u0443 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u043e\u0439 \u043f\u0430\u043c\u044f\u0442\u0438 \u0432 \u0431\u0430\u0439\u0442\u0430\u0445:<\/p>\n<div>\n<div class=\"table\">\n<table>\n<tbody>\n<tr>\n<td data-colwidth=\"293\" width=\"293\">\n<p align=\"left\">\u0432\u0432\u0435\u0440\u0445\u043d\u044f\u044f \u0441\u0442\u0440\u043e\u043a\u0430: \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u0432 \u0432 \u043a\u043e\u043b\u043b\u0435\u043a\u0446\u0438\u0438<\/p>\n<p align=\"left\">\u043b\u0435\u0432\u0430\u044f \u043a\u043e\u043b\u043e\u043d\u043a\u0430: \u0441\u043f\u0438\u0441\u043e\u043a \u043a\u043e\u043b\u043b\u0435\u043a\u0446\u0438\u0439<\/p>\n<\/td>\n<td data-colwidth=\"102\" width=\"102\">\n<p align=\"right\">1000<\/p>\n<\/td>\n<td data-colwidth=\"95\" width=\"95\">\n<p align=\"right\">10000<\/p>\n<\/td>\n<td data-colwidth=\"109\" width=\"109\">\n<p align=\"right\">100000<\/p>\n<\/td>\n<td>\n<p align=\"right\">1000000<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td data-colwidth=\"293\" width=\"293\">\n<p align=\"left\">ArrayList&lt;String><\/p>\n<\/td>\n<td data-colwidth=\"102\" width=\"102\">\n<p align=\"right\">61016<\/p>\n<\/td>\n<td data-colwidth=\"95\" width=\"95\">\n<p align=\"right\">616296<\/p>\n<\/td>\n<td data-colwidth=\"109\" width=\"109\">\n<p align=\"right\">6026920<\/p>\n<\/td>\n<td>\n<p align=\"right\">60862032<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td data-colwidth=\"293\" width=\"293\">\n<p align=\"left\">ObjectList&lt;String><\/p>\n<\/td>\n<td data-colwidth=\"102\" width=\"102\">\n<p align=\"right\">61520<\/p>\n<\/td>\n<td data-colwidth=\"95\" width=\"95\">\n<p align=\"right\">601600<\/p>\n<\/td>\n<td data-colwidth=\"109\" width=\"109\">\n<p align=\"right\">6073408<\/p>\n<\/td>\n<td>\n<p align=\"right\">61391976<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td data-colwidth=\"293\" width=\"293\">\n<p align=\"left\">\n<\/td>\n<td data-colwidth=\"102\" width=\"102\">\n<p align=\"left\">\n<\/td>\n<td data-colwidth=\"95\" width=\"95\">\n<p align=\"left\">\n<\/td>\n<td data-colwidth=\"109\" width=\"109\">\n<p align=\"left\">\n<\/td>\n<td>\n<p align=\"left\">\n<\/td>\n<\/tr>\n<tr>\n<td data-colwidth=\"293\" width=\"293\">\n<p align=\"left\">ArrayList&lt;Int><\/p>\n<\/td>\n<td data-colwidth=\"102\" width=\"102\">\n<p align=\"right\">20976<\/p>\n<\/td>\n<td data-colwidth=\"95\" width=\"95\">\n<p align=\"right\">216256<\/p>\n<\/td>\n<td data-colwidth=\"109\" width=\"109\">\n<p align=\"right\">2026880<\/p>\n<\/td>\n<td>\n<p align=\"right\">20861992<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td data-colwidth=\"293\" width=\"293\">\n<p align=\"left\">IntList<\/p>\n<\/td>\n<td data-colwidth=\"102\" width=\"102\">\n<p align=\"right\">5520<\/p>\n<\/td>\n<td data-colwidth=\"95\" width=\"95\">\n<p align=\"right\">41600<\/p>\n<\/td>\n<td data-colwidth=\"109\" width=\"109\">\n<p align=\"right\">473408<\/p>\n<\/td>\n<td>\n<p align=\"right\">5391976<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td data-colwidth=\"293\" width=\"293\">\n<p align=\"left\">\n<\/td>\n<td data-colwidth=\"102\" width=\"102\">\n<p align=\"right\">\n<\/td>\n<td data-colwidth=\"95\" width=\"95\">\n<p align=\"right\">\n<\/td>\n<td data-colwidth=\"109\" width=\"109\">\n<p align=\"right\">\n<\/td>\n<td>\n<p align=\"right\">\n<\/td>\n<\/tr>\n<tr>\n<td data-colwidth=\"293\" width=\"293\">\n<p align=\"left\">HashMap&lt;String, String> <\/p>\n<\/td>\n<td data-colwidth=\"102\" width=\"102\">\n<p align=\"right\">144192<\/p>\n<\/td>\n<td data-colwidth=\"95\" width=\"95\">\n<p align=\"right\">1497536<\/p>\n<\/td>\n<td data-colwidth=\"109\" width=\"109\">\n<p align=\"right\">15440576<\/p>\n<\/td>\n<td>\n<p align=\"right\">152380608<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td data-colwidth=\"293\" width=\"293\">\n<p align=\"left\">ScatterMap&lt;String, String><\/p>\n<\/td>\n<td data-colwidth=\"102\" width=\"102\">\n<p align=\"right\">122464<\/p>\n<\/td>\n<td data-colwidth=\"95\" width=\"95\">\n<p align=\"right\">1259488<\/p>\n<\/td>\n<td data-colwidth=\"109\" width=\"109\">\n<p align=\"right\">12371680<\/p>\n<\/td>\n<td>\n<p align=\"right\">130866400<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td data-colwidth=\"293\" width=\"293\">\n<p align=\"left\">\n<\/td>\n<td data-colwidth=\"102\" width=\"102\">\n<p align=\"right\">\n<\/td>\n<td data-colwidth=\"95\" width=\"95\">\n<p align=\"right\">\n<\/td>\n<td data-colwidth=\"109\" width=\"109\">\n<p align=\"right\">\n<\/td>\n<td>\n<p align=\"right\">\n<\/td>\n<\/tr>\n<tr>\n<td data-colwidth=\"293\" width=\"293\">\n<p align=\"left\">HashMap&lt;String, Int><\/p>\n<\/td>\n<td data-colwidth=\"102\" width=\"102\">\n<p align=\"right\">104264<\/p>\n<\/td>\n<td data-colwidth=\"95\" width=\"95\">\n<p align=\"right\">1097608<\/p>\n<\/td>\n<td data-colwidth=\"109\" width=\"109\">\n<p align=\"right\">11440648<\/p>\n<\/td>\n<td>\n<p align=\"right\">112380680<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td data-colwidth=\"293\" width=\"293\">\n<p align=\"left\">ObjectIntMap&lt;String><\/p>\n<\/td>\n<td data-colwidth=\"102\" width=\"102\">\n<p align=\"right\">66536<\/p>\n<\/td>\n<td data-colwidth=\"95\" width=\"95\">\n<p align=\"right\">699560<\/p>\n<\/td>\n<td data-colwidth=\"109\" width=\"109\">\n<p align=\"right\">6771752<\/p>\n<\/td>\n<td>\n<p align=\"right\">74866472<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td data-colwidth=\"293\" width=\"293\">\n<p align=\"left\">\n<\/td>\n<td data-colwidth=\"102\" width=\"102\">\n<p align=\"right\">\n<\/td>\n<td data-colwidth=\"95\" width=\"95\">\n<p align=\"right\">\n<\/td>\n<td data-colwidth=\"109\" width=\"109\">\n<p align=\"right\">\n<\/td>\n<td>\n<p align=\"right\">\n<\/td>\n<\/tr>\n<tr>\n<td data-colwidth=\"293\" width=\"293\">\n<p align=\"left\">HashMap&lt;Int, Int><\/p>\n<\/td>\n<td data-colwidth=\"102\" width=\"102\">\n<p align=\"right\">70224<\/p>\n<\/td>\n<td data-colwidth=\"95\" width=\"95\">\n<p align=\"right\">703568<\/p>\n<\/td>\n<td data-colwidth=\"109\" width=\"109\">\n<p align=\"right\">7446608<\/p>\n<\/td>\n<td>\n<p align=\"right\">72386640<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td data-colwidth=\"293\" width=\"293\">\n<p align=\"left\">IntIntMap<\/p>\n<\/td>\n<td data-colwidth=\"102\" width=\"102\">\n<p align=\"right\">18528<\/p>\n<\/td>\n<td data-colwidth=\"95\" width=\"95\">\n<p align=\"right\">147552<\/p>\n<\/td>\n<td data-colwidth=\"109\" width=\"109\">\n<p align=\"right\">1179744<\/p>\n<\/td>\n<td>\n<p align=\"right\">18874464<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td data-colwidth=\"293\" width=\"293\">\n<p align=\"left\">\n<\/td>\n<td data-colwidth=\"102\" width=\"102\">\n<p align=\"right\">\n<\/td>\n<td data-colwidth=\"95\" width=\"95\">\n<p align=\"right\">\n<\/td>\n<td data-colwidth=\"109\" width=\"109\">\n<p align=\"right\">\n<\/td>\n<td>\n<p align=\"right\">\n<\/td>\n<\/tr>\n<tr>\n<td data-colwidth=\"293\" width=\"293\">\n<p align=\"left\">HashSet&lt;String><\/p>\n<\/td>\n<td data-colwidth=\"102\" width=\"102\">\n<p align=\"right\">96288<\/p>\n<\/td>\n<td data-colwidth=\"95\" width=\"95\">\n<p align=\"right\">945632<\/p>\n<\/td>\n<td data-colwidth=\"109\" width=\"109\">\n<p align=\"right\">9848672<\/p>\n<\/td>\n<td>\n<p align=\"right\">96388704<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td data-colwidth=\"293\" width=\"293\">\n<p align=\"left\">ScatterSet&lt;String><\/p>\n<\/td>\n<td data-colwidth=\"102\" width=\"102\">\n<p align=\"right\">66312<\/p>\n<\/td>\n<td data-colwidth=\"95\" width=\"95\">\n<p align=\"right\">641992<\/p>\n<\/td>\n<td data-colwidth=\"109\" width=\"109\">\n<p align=\"right\">6255432<\/p>\n<\/td>\n<td>\n<p align=\"right\">66485832<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td data-colwidth=\"293\" width=\"293\">\n<p align=\"left\">\n<\/td>\n<td data-colwidth=\"102\" width=\"102\">\n<p align=\"right\">\n<\/td>\n<td data-colwidth=\"95\" width=\"95\">\n<p align=\"right\">\n<\/td>\n<td data-colwidth=\"109\" width=\"109\">\n<p align=\"right\">\n<\/td>\n<td>\n<p align=\"right\">\n<\/td>\n<\/tr>\n<tr>\n<td data-colwidth=\"293\" width=\"293\">\n<p align=\"left\">HashSet&lt;Int><\/p>\n<\/td>\n<td data-colwidth=\"102\" width=\"102\">\n<p align=\"right\">56288<\/p>\n<\/td>\n<td data-colwidth=\"95\" width=\"95\">\n<p align=\"right\">545632<\/p>\n<\/td>\n<td data-colwidth=\"109\" width=\"109\">\n<p align=\"right\">5848672<\/p>\n<\/td>\n<td>\n<p align=\"right\">56388704<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td data-colwidth=\"293\" width=\"293\">\n<p align=\"left\">IntSet<\/p>\n<\/td>\n<td data-colwidth=\"102\" width=\"102\">\n<p align=\"right\">10312<\/p>\n<\/td>\n<td data-colwidth=\"95\" width=\"95\">\n<p align=\"right\">81992<\/p>\n<\/td>\n<td data-colwidth=\"109\" width=\"109\">\n<p align=\"right\">655432<\/p>\n<\/td>\n<td>\n<p align=\"right\">10485832<\/p>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<p>\u041d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0437\u0430\u043c\u0435\u0447\u0430\u043d\u0438\u0439:<\/p>\n<ol>\n<li>\n<p>ObjectList \u0438\u043c\u0435\u0435\u0442 \u043d\u0430\u0447\u0430\u043b\u044c\u043d\u0443\u044e \u0451\u043c\u043a\u043e\u0441\u0442\u044c 16 \u0432 \u043e\u0442\u043b\u0438\u0447\u0438\u0438 \u043e\u0442 ArrayList, \u0443 \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u043e\u043d\u0430 \u0441\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 10, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043f\u0440\u0438 \u043a\u0430\u0436\u0434\u043e\u043c \u0443\u0432\u0435\u043b\u0438\u0447\u0435\u043d\u0438\u0438 \u0441\u043f\u0438\u0441\u043a\u0430 ObjectList \u043c\u043e\u0436\u0435\u0442 \u0437\u0430\u043d\u0438\u043c\u0430\u0442\u044c \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u0431\u043e\u043b\u044c\u0448\u0435 \u043c\u0435\u0441\u0442\u0430, \u043d\u043e \u043f\u0440\u043e\u0438\u0433\u0440\u044b\u0448\u0430 \u0432 \u044d\u0442\u043e\u043c \u043d\u0435\u0442, \u0442\u0430\u043a \u044d\u0442\u043e\u0442 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440 \u043c\u043e\u0436\u043d\u043e \u0438\u0437\u043c\u0435\u043d\u0438\u0442\u044c \u0432 \u043a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0442\u043e\u0440\u0435.<\/p>\n<\/li>\n<li>\n<p>HashMap \u043d\u0435 \u0442\u0430\u043a \u0441\u0438\u043b\u044c\u043d\u043e \u043f\u0440\u043e\u0438\u0433\u0440\u044b\u0432\u0430\u0435\u0442 ScatterMap (\u0432 1.2 &#8212; 1.3 \u0440\u0430\u0437\u0430) \u043a\u0430\u043a \u044f \u043f\u043e\u043b\u0430\u0433\u0430\u043b, \u0437\u0430\u0442\u043e ScatterSet \u0432\u044b\u0438\u0433\u0440\u044b\u0432\u0430\u0435\u0442 HashSet \u043f\u0440\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u0432 1.5 \u0440\u0430\u0437\u0430!<\/p>\n<\/li>\n<li>\n<p>\u041a\u043e\u043b\u043b\u0435\u043a\u0446\u0438\u0438 \u0434\u043b\u044f \u043f\u0440\u0438\u043c\u0438\u0442\u0438\u0432\u043d\u044b\u0445 \u0442\u0438\u043f\u043e\u0432 \u0432 2-7 \u0440\u0430\u0437 \u043f\u0440\u0435\u0432\u043e\u0441\u0445\u043e\u0434\u044f\u0442 \u043e\u0431\u043e\u0431\u0449\u0451\u043d\u043d\u044b\u0435 \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u044b, \u0447\u0442\u043e \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0441\u043e\u043a\u0440\u0430\u0442\u0438\u0442\u044c \u043f\u0440\u0438\u043b\u0438\u0447\u043d\u044b\u0439 \u043a\u0443\u0441\u043e\u043a \u043f\u0430\u043c\u044f\u0442\u0438.<\/p>\n<\/li>\n<\/ol>\n<h2>\u0417\u0430\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435<\/h2>\n<p>\u041d\u0430\u0434\u0435\u044e\u0441\u044c \u0441\u0442\u0430\u0442\u044c\u044f \u0431\u044b\u043b\u0430 \u043f\u043e\u043b\u0435\u0437\u043d\u0430 \u0434\u043b\u044f \u0432\u0430\u0441 \u0438 \u043c\u043d\u0435 \u0443\u0434\u0430\u043b\u043e\u0441\u044c \u043d\u0430\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e \u043e\u043f\u0438\u0441\u0430\u0442\u044c \u043c\u0435\u0445\u0430\u043d\u0438\u0437\u043c\u044b \u0440\u0430\u0431\u043e\u0442\u044b \u043d\u043e\u0432\u044b\u0445 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440 \u0434\u0430\u043d\u043d\u044b\u0445 \u0438\u0437 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 androidx.collection, \u043f\u0438\u0448\u0438\u0442\u0435 \u0441\u0432\u043e\u0451 \u043c\u043d\u0435\u043d\u0438\u0435 \u0432 \u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u044f\u0445 \u0438 \u0432\u0441\u0435\u043c \u0445\u043e\u0440\u043e\u0448\u0435\u0433\u043e \u043a\u043e\u0434\u0430!<\/p>\n<p>\u041f\u043e\u043b\u0435\u0437\u043d\u044b\u0435 \u0441\u0441\u044b\u043b\u043a\u0438:<\/p>\n<ol>\n<li>\n<p><a href=\"https:\/\/t.me\/android_under_the_hood\" rel=\"noopener noreferrer nofollow\">\u041c\u043e\u0439 \u0442\u0435\u043b\u0435\u0433\u0440\u0430\u043c \u043a\u0430\u043d\u0430\u043b<\/a><\/p>\n<\/li>\n<li>\n<p><a href=\"https:\/\/github.com\/DmitryTsyvtsyn\/Kotlin-Algorithms-and-Design-Patterns\" rel=\"noopener noreferrer nofollow\">\u041c\u043e\u0439 Github \u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u0439 \u043f\u043e \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u0430\u043c \u0438 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430\u043c \u0434\u0430\u043d\u043d\u044b\u0445<\/a><\/p>\n<\/li>\n<li>\n<p><a href=\"https:\/\/developer.android.com\/jetpack\/androidx\/releases\/collection\" rel=\"noopener noreferrer nofollow\">\u041e\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u0438 \u0438\u0441\u0442\u043e\u0440\u0438\u044f \u0440\u0435\u043b\u0438\u0437\u043e\u0432 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438<\/a><\/p>\n<\/li>\n<li>\n<p><a href=\"https:\/\/kotlinlang.org\/docs\/inline-classes.html\" rel=\"noopener noreferrer nofollow\">Inline value classes<\/a><\/p>\n<\/li>\n<li>\n<p><a href=\"https:\/\/kotlinlang.org\/docs\/inline-functions.html\" rel=\"noopener noreferrer nofollow\">Inline functions<\/a><\/p>\n<\/li>\n<li>\n<p><a href=\"https:\/\/docs.oracle.com\/javase\/tutorial\/java\/data\/autoboxing.html\" rel=\"noopener noreferrer nofollow\">Autoboxing \/ unboxing \u043c\u0435\u0445\u0430\u043d\u0438\u0437\u043c<\/a><\/p>\n<\/li>\n<li>\n<p><a href=\"https:\/\/kotlinlang.org\/docs\/multiplatform.html\" rel=\"noopener noreferrer nofollow\">Kotlin Multiplatform<\/a><\/p>\n<\/li>\n<li>\n<p><a href=\"https:\/\/ru.wikipedia.org\/wiki\/%D0%94%D0%B8%D0%BD%D0%B0%D0%BC%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%B8%D0%B9_%D0%BC%D0%B0%D1%81%D1%81%D0%B8%D0%B2\" rel=\"noopener noreferrer nofollow\">\u0414\u0438\u043d\u0430\u043c\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u043c\u0430\u0441\u0441\u0438\u0432<\/a><\/p>\n<\/li>\n<li>\n<p><a href=\"https:\/\/ru.wikipedia.org\/wiki\/%D0%A5%D0%B5%D1%88-%D1%82%D0%B0%D0%B1%D0%BB%D0%B8%D1%86%D0%B0\" rel=\"noopener noreferrer nofollow\">\u0425\u044d\u0448-\u0442\u0430\u0431\u043b\u0438\u0446\u0430<\/a><\/p>\n<\/li>\n<li>\n<p><a href=\"https:\/\/en.wikipedia.org\/wiki\/Quadratic_probing\" rel=\"noopener noreferrer nofollow\">\u0410\u043b\u0433\u043e\u0440\u0438\u0442\u043c quadratic probing<\/a><\/p>\n<\/li>\n<li>\n<p><a href=\"https:\/\/en.wikipedia.org\/wiki\/MurmurHash#Algorithm\" rel=\"noopener noreferrer nofollow\">\u0410\u043b\u0433\u043e\u0440\u0438\u0442\u043c MurmurHash<\/a><\/p>\n<\/li>\n<\/ol>\n<\/div>\n<\/div>\n<\/div>\n<p><!----><!----><\/div>\n<p><!----><!----><br \/> \u0441\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b \u0441\u0442\u0430\u0442\u044c\u0438 <a href=\"https:\/\/habr.com\/ru\/articles\/811415\/\"> https:\/\/habr.com\/ru\/articles\/811415\/<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<div><!--[--><!--]--><\/div>\n<div id=\"post-content-body\">\n<div>\n<div class=\"article-formatted-body article-formatted-body article-formatted-body_version-2\">\n<div xmlns=\"http:\/\/www.w3.org\/1999\/xhtml\">\n<figure class=\"full-width\"><\/figure>\n<p>\u0412 2018 \u0433\u043e\u0434\u0443 \u0432 androidx \u043f\u043e\u044f\u0432\u0438\u043b\u0441\u044f \u043d\u043e\u0432\u044b\u0439 \u043f\u0430\u043a\u0435\u0442 collection, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u043b \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0441\u043f\u0435\u0446\u0438\u0444\u0438\u0447\u043d\u044b\u0445 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440 \u0434\u0430\u043d\u043d\u044b\u0445, \u043f\u0435\u0440\u0435\u043f\u0438\u0441\u0430\u043d\u043d\u044b\u0445 \u043d\u0430 Kotlin, \u0442\u0430\u043a\u0438\u0445 \u043a\u0430\u043a <a href=\"https:\/\/developer.android.com\/reference\/androidx\/collection\/LongSparseArray\" rel=\"noopener noreferrer nofollow\">LongSparseArray<\/a>, <a href=\"https:\/\/developer.android.com\/reference\/androidx\/collection\/SimpleArrayMap\" rel=\"noopener noreferrer nofollow\">SimpleArrayMap<\/a> \u0438<strong> <\/strong><a href=\"https:\/\/developer.android.com\/reference\/androidx\/collection\/SparseArrayCompat\" rel=\"noopener noreferrer nofollow\">SparseArrayCompat<\/a>.<\/p>\n<p>\u041d\u0430 \u0442\u043e\u0442 \u043f\u0435\u0440\u0438\u043e\u0434 Kotlin \u0442\u043e\u043b\u044c\u043a\u043e \u043d\u0430\u0447\u0438\u043d\u0430\u043b \u043d\u0430\u0431\u0438\u0440\u0430\u0442\u044c \u043e\u0431\u043e\u0440\u043e\u0442\u044b \u0432 Android \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0435 \u0438 \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u043d\u043e\u0432\u044b\u0445 \u0431\u043e\u043b\u0435\u0435 \u044d\u0444\u0444\u0435\u043a\u0442\u0438\u0432\u043d\u044b\u0445 \u043a\u043e\u043b\u043b\u0435\u043a\u0446\u0438\u0439, \u043f\u043e\u043b\u043d\u043e\u0441\u0442\u044c\u044e \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u043d\u044b\u0445 \u043d\u0430 \u043d\u0451\u043c \u0431\u044b\u043b\u043e \u043e\u0434\u043d\u0438\u043c \u0438\u0437 \u0448\u0430\u0433\u043e\u0432 \u043f\u043e \u0432\u043d\u0435\u0434\u0440\u0435\u043d\u0438\u044e \u044f\u0437\u044b\u043a\u0430.<\/p>\n<p>\u0421 \u0442\u0435\u0445 \u043f\u043e\u0440 \u043f\u0440\u043e\u0448\u043b\u043e \u0431\u043e\u043b\u0435\u0435 6 \u043b\u0435\u0442 \u0438 \u0432 \u044f\u043d\u0432\u0430\u0440\u0435 \u0442\u0435\u043a\u0443\u0449\u0435\u0433\u043e \u0433\u043e\u0434\u0430 \u0431\u044b\u043b \u0432\u044b\u043f\u0443\u0449\u0435\u043d \u043d\u043e\u0432\u044b\u0439 \u0440\u0435\u043b\u0438\u0437 \u0441 \u043c\u043e\u0449\u043d\u043e\u0439 \u0437\u0430\u043c\u0435\u043d\u043e\u0439 <a href=\"https:\/\/docs.oracle.com\/javase\/8\/docs\/api\/java\/util\/HashMap.html\" rel=\"noopener noreferrer nofollow\">HashMap<\/a>, \u043e \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u044f \u0440\u0430\u0441\u0441\u043a\u0430\u0436\u0443 \u0447\u0443\u0442\u044c \u043f\u043e\u0437\u0436\u0435:<\/p>\n<pre><code class=\"kotlin\">dependencies {     implementation(\"androidx.collection:collection:1.4.0\") }<\/code><\/pre>\n<p>\u0421\u043f\u0438\u0441\u043e\u043a \u0440\u0435\u043b\u0438\u0437\u043e\u0432 \u0438 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0439 \u043c\u043e\u0436\u0435\u0442\u0435 \u0433\u043b\u044f\u043d\u0443\u0442\u044c \u043d\u0430 <a href=\"https:\/\/developer.android.com\/jetpack\/androidx\/releases\/collection\" rel=\"noopener noreferrer nofollow\">\u043e\u0444\u0438\u0446\u0438\u0430\u043b\u044c\u043d\u043e\u043c \u0441\u0430\u0439\u0442\u0435<\/a>.<\/p>\n<p>\u0417\u0430\u0447\u0435\u043c \u0432\u043e\u043e\u0431\u0449\u0435 \u043d\u0443\u0436\u043d\u043e \u0431\u044b\u043b\u043e \u0441\u0442\u0440\u043e\u0433\u0430\u0442\u044c \u043d\u043e\u0432\u044b\u0435 \u043a\u043e\u043b\u043b\u0435\u043a\u0446\u0438\u0438 \u0438 \u043f\u0435\u0440\u0435\u043f\u0438\u0441\u044b\u0432\u0430\u0442\u044c \u0441\u0442\u0430\u0440\u044b\u0435?<\/p>\n<p>\u041d\u0430 \u044d\u0442\u043e \u0435\u0441\u0442\u044c \u043a\u0430\u043a \u043c\u0438\u043d\u0438\u043c\u0443\u043c \u0442\u0440\u0438 \u043f\u0440\u0438\u0447\u0438\u043d\u044b:<\/p>\n<ol>\n<li>\n<p>\u042d\u0444\u0444\u0435\u043a\u0442\u0438\u0432\u043d\u044b\u0439 \u0440\u0430\u0441\u0445\u043e\u0434 \u043f\u0430\u043c\u044f\u0442\u0438 &#8212; \u0434\u0443\u043c\u0430\u044e \u043d\u0435 \u0441\u0435\u043a\u0440\u0435\u0442 \u0447\u0442\u043e \u0434\u0430\u0436\u0435 \u043f\u0440\u0438 \u043d\u0430\u043b\u0438\u0447\u0438\u0438 8Gb \u041e\u0417\u0423 \u043d\u0430 \u0432\u0430\u0448\u0435\u043c \u0442\u0435\u043b\u0435\u0444\u043e\u043d\u0435 \u043f\u0430\u043c\u044f\u0442\u044c \u043d\u0435 \u0431\u0435\u0441\u043a\u043e\u043d\u0435\u0447\u043d\u0430, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043d\u043e\u0432\u044b\u0435 \u043a\u043e\u043b\u043b\u0435\u043a\u0446\u0438\u0438 \u0431\u044b\u043b\u0438 \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u044b, \u043f\u0440\u0438\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u044f\u0441\u044c \u043f\u0440\u0438\u043d\u0446\u0438\u043f\u0430 &#171;\u043c\u0438\u043d\u0438\u043c\u0443\u043c \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u0432&#187;. <\/p>\n<\/li>\n<li>\n<p>\u042d\u0444\u0444\u0435\u043a\u0442\u0438\u0432\u043d\u0430\u044f \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u043e\u0432 &#8212; \u0441\u0442\u0430\u0440\u044b\u0435 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u043c\u043e\u0433\u0443\u0442 \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0442\u044c \u043d\u0435 \u043e\u0447\u0435\u043d\u044c \u044d\u0444\u0444\u0435\u043a\u0442\u0438\u0432\u043d\u044b\u0435 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u044b \u0438 \u0443\u0441\u0442\u0430\u0440\u0435\u0432\u0448\u0438\u0435 \u0440\u0435\u0448\u0435\u043d\u0438\u044f, \u0442\u0440\u0435\u0431\u0443\u044e\u0449\u0438\u0435 \u0440\u0435\u0444\u0430\u043a\u0442\u043e\u0440\u0438\u043d\u0433\u0430.<\/p>\n<\/li>\n<li>\n<p>Kotlin Multiplatform &#8212; \u043f\u0440\u0438 \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u0438\u0438 \u043e\u0431\u0449\u0435\u0433\u043e \u043a\u043e\u0434\u0430 \u043d\u0430 Kotlin \u043f\u043e\u0434 \u0440\u0430\u0437\u043d\u044b\u0435 \u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u044b \u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u043c\u0438\u043d\u0438\u043c\u0430\u043b\u044c\u043d\u043e\u0435 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0435\u0439 \u043e\u0442 \u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u0435\u043d\u043d\u044b\u0445 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440 \u0434\u0430\u043d\u043d\u044b\u0445, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440 \u0442\u0430\u043a\u0438\u0445 \u043a\u0430\u043a android.util.SparseArray.<\/p>\n<\/li>\n<\/ol>\n<p>\u0410 \u0442\u0435\u043f\u0435\u0440\u044c \u043f\u0435\u0440\u0435\u0439\u0434\u0451\u043c \u043a \u0441\u0430\u043c\u043e\u0439 \u0432\u043a\u0443\u0441\u043d\u043e\u0439 \u0447\u0430\u0441\u0442\u0438 \u0441\u0442\u0430\u0442\u044c\u0438, \u0440\u0430\u0437\u0431\u0435\u0440\u0451\u043c\u0441\u044f \u0447\u0442\u043e \u0437\u0430 \u043c\u0430\u0433\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u0448\u0442\u0443\u043a\u0438 \u043d\u0430\u043a\u043e\u043b\u0434\u043e\u0432\u0430\u043b\u0438 Google \u043a\u043e\u0434\u0435\u0440\u044b \u0438 \u0441\u0430\u043c\u043e\u0435 \u0433\u043b\u0430\u0432\u043d\u043e\u0435 \u043a\u0430\u043a \u043e\u043d\u0438 \u0440\u0430\u0431\u043e\u0442\u0430\u044e\u0442 \u043f\u043e\u0434 \u043a\u0430\u043f\u043e\u0442\u043e\u043c.<\/p>\n<p>\u041f\u043e\u043b\u0435\u0442\u0435\u043b\u0438!<\/p>\n<h2>\u0421\u043f\u0438\u0441\u043a\u0438 \u0438\u043b\u0438 \u0434\u0438\u043d\u0430\u043c\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u043c\u0430\u0441\u0441\u0438\u0432\u044b<\/h2>\n<p>\u0411\u044b\u043b\u043e \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u043e \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0439:<\/p>\n<pre><code class=\"kotlin\">\/\/ \u043e\u0431\u043e\u0431\u0449\u0451\u043d\u043d\u0430\u044f \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f val games = objectListOf(\"Atomic Heart\", \"BioShock\", \"Mafia II\") val movies = objectListOf(\"Dune: Part Two\", \"1 + 1\")  val moviesAndGames = mutableObjectListOf&lt;String>() \/\/ \u043f\u0435\u0440\u0435\u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0451\u043d\u043d\u044b\u0435 \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440\u044b plusAsssign moviesAndGames += movies moviesAndGames += games moviesAndGames += \"Far Cry 3\" moviesAndGames += \"The Shawshank Redemption\"  \/\/ \u0438\u0437\u043c\u0435\u043d\u044f\u0435\u043c\u0430\u044f \u0432\u0435\u0440\u0441\u0438\u044f mutableIntListOf() val fibonacciIntegerNumbers = intListOf(1, 1, 2, 3, 5)  \/\/ \u0438\u0437\u043c\u0435\u043d\u044f\u0435\u043c\u0430\u044f \u0432\u0435\u0440\u0441\u0438\u044f mutableLongListOf() val fibonacciLongNumbers = longListOf(1, 1, 2, 3, 5)  \/\/ \u0438\u0437\u043c\u0435\u043d\u044f\u0435\u043c\u0430\u044f \u0432\u0435\u0440\u0441\u0438\u044f mutableFloatListOf() val fibonacciFloatingNumbers = floatListOf(1f, 1f, 2f, 3f, 5f)  \/* P.S. \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u0434\u043b\u044f \u043f\u0440\u0438\u043c\u0438\u0442\u0438\u0432\u043d\u044b\u0445 \u0442\u0438\u043f\u043e\u0432 \u0431\u044b\u043b\u0438 \u0441\u043e\u0437\u0434\u0430\u043d\u044b \u043f\u043e\u0434 \u043a\u043e\u043f\u0438\u0440\u043a\u0443  \u043d\u0430 \u043e\u0441\u043d\u043e\u0432\u0435 \u043e\u0431\u043e\u0431\u0449\u0451\u043d\u043d\u043e\u0439 objectListOf() *\/<\/code><\/pre>\n<p>\u041f\u043e\u0434 \u043a\u0430\u043f\u043e\u0442\u043e\u043c \u043e\u0431\u044b\u0447\u043d\u044b\u0439 \u043c\u0430\u0441\u0441\u0438\u0432, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0443\u0432\u0435\u043b\u0438\u0447\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u0432 \u043f\u043e\u043b\u0442\u043e\u0440\u0430 \u0440\u0430\u0437\u0430 \u043f\u0440\u0438 \u043f\u0440\u0435\u0432\u044b\u0448\u0435\u043d\u0438\u0438 \u0440\u0430\u0437\u043c\u0435\u0440\u0430, \u0430 \u043f\u0440\u0438 \u0443\u0434\u0430\u043b\u0435\u043d\u0438\u0438 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439 \u0438\u0437 \u0441\u0435\u0440\u0435\u0434\u0438\u043d\u044b \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u0441\u0434\u0432\u0438\u0433 \u043c\u0430\u0441\u0441\u0438\u0432\u0430, \u043c\u043e\u0436\u043d\u043e \u0441\u043a\u0430\u0437\u0430\u0442\u044c \u0447\u0442\u043e \u044d\u0442\u043e \u0430\u043d\u0430\u043b\u043e\u0433\u0438\u044f <a href=\"https:\/\/docs.oracle.com\/javase\/8\/docs\/api\/java\/util\/ArrayList.html\" rel=\"noopener noreferrer nofollow\">ArrayList<\/a> \u0438\u0437 Java \u043c\u0438\u0440\u0430.<\/p>\n<p>\u041e\u0441\u043d\u043e\u0432\u043d\u044b\u0435 \u043f\u0440\u0435\u0438\u043c\u0443\u0449\u0435\u0441\u0442\u0432\u0430:<\/p>\n<ol>\n<li>\n<p>\u041c\u0435\u0442\u043e\u0434\u044b forEach, forEachIndexed \u0438 \u0430\u043d\u0430\u043b\u043e\u0433\u0438\u0447\u043d\u044b\u0435 \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043d\u044b \u0431\u0435\u0437 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u0438\u0442\u0435\u0440\u0430\u0442\u043e\u0440\u043e\u0432 + \u043e\u043d\u0438 \u043f\u043e\u043c\u0435\u0447\u0435\u043d\u044b \u043a\u043b\u044e\u0447\u0435\u0432\u044b\u043c \u0441\u043b\u043e\u0432\u043e\u043c inline \u0434\u043b\u044f \u0443\u043c\u0435\u043d\u044c\u0448\u0435\u043d\u0438\u044f \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0438 <a href=\"https:\/\/ru.wikipedia.org\/wiki\/%D0%A1%D1%82%D0%B5%D0%BA_%D0%B2%D1%8B%D0%B7%D0%BE%D0%B2%D0%BE%D0%B2\" rel=\"noopener noreferrer nofollow\">\u0441\u0442\u044d\u043a\u0430 \u0432\u044b\u0437\u043e\u0432\u043e\u0432<\/a>.<\/p>\n<\/li>\n<li>\n<p>\u0415\u0441\u0442\u044c \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0435 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u0434\u043b\u044f \u043f\u0440\u0438\u043c\u0438\u0442\u0438\u0432\u043d\u044b\u0445 \u0442\u0438\u043f\u043e\u0432 Int, Long \u0438 Float \u0431\u0435\u0437 <a href=\"https:\/\/docs.oracle.com\/javase\/tutorial\/java\/data\/autoboxing.html\" rel=\"noopener noreferrer nofollow\">autoboxing \/ unboxing<\/a> \u043c\u0435\u0445\u0430\u043d\u0438\u0437\u043c\u0430, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0445\u0430\u0440\u0430\u043a\u0442\u0435\u0440\u0435\u043d \u0434\u043b\u044f ArrayList&lt;Integer> \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440.<\/p>\n<\/li>\n<li>\n<p>\u041f\u0435\u0440\u0435\u0433\u0440\u0443\u0437\u043a\u0430 \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440\u043e\u0432 += \u0438 -= \u0434\u043b\u044f \u0431\u043e\u043b\u0435\u0435 \u043b\u0430\u043a\u043e\u043d\u0438\u0447\u043d\u043e\u0433\u043e \u043a\u043e\u0434\u0430, \u0442\u0430\u043a\u0436\u0435 \u043a\u043b\u0430\u0441\u0441\u044b \u043a\u043e\u043b\u043b\u0435\u043a\u0446\u0438\u0439 \u043f\u043e\u043c\u0435\u0447\u0435\u043d\u044b \u043a\u043b\u044e\u0447\u0435\u0432\u044b\u043c \u0441\u043b\u043e\u0432\u043e\u043c <a href=\"https:\/\/kotlinlang.org\/docs\/sealed-classes.html\" rel=\"noopener noreferrer nofollow\">sealed<\/a>, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0437\u0430 \u043f\u0440\u0435\u0434\u0435\u043b\u0430\u043c\u0438 androidx.collection \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 \u043d\u0435 \u0443\u0434\u0430\u0441\u0442\u0441\u044f \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u043d\u043e\u0432\u044b\u0445 \u043d\u0430\u0441\u043b\u0435\u0434\u043d\u0438\u043a\u043e\u0432 \u0438 \u043d\u0430\u0440\u0443\u0448\u0438\u0442\u044c \u0447\u0435\u0442\u043a\u043e \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0451\u043d\u043d\u0443\u044e \u043b\u043e\u0433\u0438\u043a\u0443.<\/p>\n<\/li>\n<\/ol>\n<p>\u0421\u0432\u043e\u0434\u043a\u0430 \u043a\u043b\u0430\u0441\u0441\u043e\u0432, \u0435\u0441\u043b\u0438 \u0437\u0430\u0445\u043e\u0442\u0438\u0442\u0435 \u0437\u0430\u043b\u0435\u0437\u0442\u044c \u0432 \u0438\u0441\u0445\u043e\u0434\u043d\u0438\u043a\u0438:<\/p>\n<ol>\n<li>\n<p><a href=\"https:\/\/developer.android.com\/reference\/androidx\/collection\/ObjectList\" rel=\"noopener noreferrer nofollow\">ObjectList<\/a> \/ <a href=\"https:\/\/developer.android.com\/reference\/androidx\/collection\/MutableObjectList\" rel=\"noopener noreferrer nofollow\">MutableObjectList<\/a> \u0434\u043b\u044f \u043e\u0431\u043e\u0431\u0449\u0435\u043d\u043d\u044b\u0445 \u0441\u043f\u0438\u0441\u043a\u043e\u0432<\/p>\n<\/li>\n<li>\n<p><a href=\"https:\/\/developer.android.com\/reference\/androidx\/collection\/IntList\" rel=\"noopener noreferrer nofollow\">IntList<\/a> \/ <a href=\"https:\/\/developer.android.com\/reference\/androidx\/collection\/MutableIntList\" rel=\"noopener noreferrer nofollow\">MutableIntList<\/a> \u0434\u043b\u044f \u043f\u0440\u0438\u043c\u0438\u0442\u0438\u0432\u043d\u043e\u0433\u043e \u0442\u0438\u043f\u0430 Int<\/p>\n<\/li>\n<li>\n<p><a href=\"https:\/\/developer.android.com\/reference\/androidx\/collection\/FloatList\" rel=\"noopener noreferrer nofollow\">FloatList<\/a> \/ <a href=\"https:\/\/developer.android.com\/reference\/androidx\/collection\/MutableFloatList\" rel=\"noopener noreferrer nofollow\">MutableFloatList<\/a> \u0434\u043b\u044f \u043f\u0440\u0438\u043c\u0438\u0442\u0438\u0432\u043d\u043e\u0433\u043e \u0442\u0438\u043f\u0430 Float<\/p>\n<\/li>\n<li>\n<p><a href=\"https:\/\/developer.android.com\/reference\/androidx\/collection\/LongList\" rel=\"noopener noreferrer nofollow\">LongList<\/a> \/ <a href=\"https:\/\/developer.android.com\/reference\/androidx\/collection\/MutableLongList\" rel=\"noopener noreferrer nofollow\">MutableLongList<\/a> \u0434\u043b\u044f \u043f\u0440\u0438\u043c\u0438\u0442\u0438\u0432\u043d\u043e\u0433\u043e \u0442\u0438\u043f\u0430 Long<\/p>\n<\/li>\n<\/ol>\n<h2>\u041f\u0430\u0440\u044b \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439 <\/h2>\n<p>\u0411\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430 androidx.collection \u0432\u043a\u043b\u044e\u0447\u0430\u0435\u0442 \u0442\u0440\u0438 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u043f\u0430\u0440 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439 \u0434\u043b\u044f \u043f\u0440\u0438\u043c\u0438\u0442\u0438\u0432\u043d\u044b\u0445 \u0442\u0438\u043f\u043e\u0432, \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e \u043d\u0430 \u043c\u043e\u043c\u0435\u043d\u0442 \u0447\u0442\u0435\u043d\u0438\u044f \u044d\u0442\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0438 \u0447\u0442\u043e-\u0442\u043e \u0438\u0437\u043c\u0435\u043d\u0438\u043b\u043e\u0441\u044c, \u043d\u043e \u0431\u0430\u0437\u043e\u0432\u044b\u0435 \u0438\u0434\u0435\u0438 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u0440\u0435\u0434\u043a\u043e \u043c\u0435\u043d\u044f\u044e\u0442\u0441\u044f.<\/p>\n<p>1. <a href=\"https:\/\/developer.android.com\/reference\/androidx\/collection\/IntIntPair\" rel=\"noopener noreferrer nofollow\">IntIntPair<\/a> \u0445\u0440\u0430\u043d\u0438\u0442 \u0434\u0432\u0430 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u0442\u0438\u043f\u0430 Int \u0432 \u0432\u0438\u0434\u0435 \u043e\u0434\u043d\u043e\u0433\u043e \u0447\u0438\u0441\u043b\u0430 Long \u0431\u043b\u0430\u0433\u043e\u0434\u0430\u0440\u044f \u043f\u0440\u043e\u0441\u0442\u0435\u0439\u0448\u0435\u0439 \u0431\u0438\u0442\u043e\u0432\u043e\u0439 \u043c\u0430\u0442\u0435\u043c\u0430\u0442\u0438\u043a\u0438: \u043f\u0435\u0440\u0432\u043e\u0435 \u0447\u0438\u0441\u043b\u043e \u0445\u0440\u0430\u043d\u0438\u0442\u0441\u044f \u0432 \u0441\u0442\u0430\u0440\u0448\u0438\u0445 32 \u0431\u0438\u0442\u0430\u0445 Long, \u0430 \u0432\u0442\u043e\u0440\u043e\u0435 \u0432 \u043c\u043b\u0430\u0434\u0448\u0438\u0445:<\/p>\n<pre><code class=\"kotlin\">@JvmInline value class IntIntPair(val packedValue: Long) {        constructor(first: Int, second: Int) : this(packInts(first, second))          \/\/ \u043f\u0435\u0440\u0432\u043e\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0445\u0440\u0430\u043d\u0438\u0442\u0441\u044f \u0432 \u0441\u0442\u0430\u0440\u0448\u0438\u0445 \u0431\u0438\u0442\u0430\u0445 \u0447\u0438\u0441\u043b\u0430 Long     val first: Int         get() = (packedValue shr 32).toInt()      \/\/ \u0432\u0442\u043e\u0440\u043e\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0445\u0440\u0430\u043d\u0438\u0442\u0441\u044f \u0432 \u043c\u043b\u0430\u0434\u0448\u0438\u0445 \u0431\u0438\u0442\u0430\u0445 \u0447\u0438\u0441\u043b\u0430 Long     val second: Int         get() = (packedValue and 0xFFFFFFFF).toInt() }  inline fun packInts(val1: Int, val2: Int): Long {     \/* \u0447\u0442\u043e\u0431\u044b \u043f\u043e\u043b\u043e\u0436\u0438\u0442\u044c \u0434\u0432\u0430 32-\u0431\u0438\u0442\u043d\u044b\u0445 \u0447\u0438\u0441\u043b\u0430 \u0432 \u043e\u0434\u043d\u043e 64-\u0431\u0438\u0442\u043d\u043e\u0435      \u043f\u0435\u0440\u0432\u043e\u0435 \u0447\u0438\u0441\u043b\u043e \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u0443\u0435\u043c \u043a 64-\u0431\u0438\u0442\u043d\u043e\u043c\u0443 \u0438 \u0434\u0435\u043b\u0430\u0435\u043c \u0441\u0434\u0432\u0438\u0433 \u0432\u043b\u0435\u0432\u043e \u043d\u0430 32 \u0431\u0438\u0442\u0430,      \u0432\u0442\u043e\u0440\u043e\u0435 \u0442\u0430\u043a\u0436\u0435 \u0440\u0430\u0441\u0448\u0438\u0440\u044f\u0435\u043c \u0434\u043e 64 \u0431\u0438\u0442 \u0441 \u0437\u0430\u043d\u0443\u043b\u0435\u043d\u0438\u0435\u043c \u0441\u0442\u0430\u0440\u0448\u0438\u0445 32 \u0431\u0438\u0442,      \u0435\u0441\u043b\u0438 \u0442\u0430\u043a\u0438\u0435 \u0441\u043b\u0443\u0447\u0430\u0439\u043d\u043e \u0442\u0430\u043c \u043e\u043a\u0430\u0437\u0430\u043b\u0438\u0441\u044c, \u043f\u043e\u0441\u043b\u0435 \u044d\u0442\u043e\u0433\u043e \u0441\u043e\u0432\u043c\u0435\u0449\u0430\u0435\u043c \u0431\u0438\u0442\u044b \u043e\u0431\u0435\u0438\u0445 \u0447\u0438\u0441\u0435\u043b      \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u043b\u043e\u0433\u0438\u0447\u0435\u0441\u043a\u043e\u0433\u043e OR *\/     return (val1.toLong() shl 32) or (val2.toLong() and 0xFFFFFFFF) }<\/code><\/pre>\n<p>\u041e\u0431\u0440\u0430\u0442\u0438\u0442\u0435 \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u0435, \u0447\u0442\u043e IntIntPair \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f <a href=\"https:\/\/kotlinlang.org\/docs\/inline-classes.html\" rel=\"noopener noreferrer nofollow\">inline value \u043a\u043b\u0430\u0441\u0441\u043e\u043c<\/a>, \u0430 \u044d\u0442\u043e \u0437\u043d\u0430\u0447\u0438\u0442 \u0447\u0442\u043e \u043f\u043e\u043b\u0435 <em>packedValue<\/em> \u0431\u0443\u0434\u0435\u0442 \u0432\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u0442\u044c\u0441\u044f \u0432 \u043c\u0435\u0441\u0442\u043e \u0432\u044b\u0437\u043e\u0432\u0430 \u0431\u0435\u0437 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u043e\u0431\u044a\u0435\u043a\u0442\u0430 \u043a\u043b\u0430\u0441\u0441\u0430, \u0447\u0442\u043e \u0438\u0437\u0431\u0430\u0432\u043b\u044f\u0435\u0442 <a href=\"https:\/\/ru.wikipedia.org\/wiki\/%D0%A1%D0%B1%D0%BE%D1%80%D0%BA%D0%B0_%D0%BC%D1%83%D1%81%D0%BE%D1%80%D0%B0\" rel=\"noopener noreferrer nofollow\">GC<\/a> \u043e\u0442 \u043d\u0435\u043d\u0443\u0436\u043d\u043e\u0439 \u0440\u0430\u0431\u043e\u0442\u044b.<\/p>\n<p>2. <a href=\"https:\/\/developer.android.com\/reference\/androidx\/collection\/FloatFloatPair\" rel=\"noopener noreferrer nofollow\">FloatFloatPair<\/a> \u0430\u043d\u0430\u043b\u043e\u0433\u0438\u0447\u043d\u043e IntIntPair \u0445\u0440\u0430\u043d\u0438\u0442 \u0434\u0432\u0430 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u0442\u0438\u043f\u0430 Float \u0432 \u043e\u0434\u043d\u043e\u043c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0438 \u0442\u0438\u043f\u0430 Long, \u043e\u0442\u043b\u0438\u0447\u0438\u0435 \u0437\u0430\u043a\u043b\u044e\u0447\u0430\u0435\u0442\u0441\u044f \u0442\u043e\u043b\u044c\u043a\u043e \u0432 \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0439 \u0442\u0440\u0430\u043d\u0441\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438 \u0447\u0438\u0441\u043b\u0430 Float \u0432 \u0431\u0438\u0442\u043e\u0432\u043e\u0435 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u0442\u0438\u043f\u0430 Int:<\/p>\n<pre><code class=\"kotlin\">\/* \u0441\u043d\u0430\u0447\u0430\u043b\u0430 \u0438\u0437\u0432\u043b\u0435\u043a\u0430\u0435\u0442\u0441\u044f \u0431\u0438\u0442\u043e\u0432\u043e\u0435 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u0442\u0438\u043f\u0430 Int \u0438\u0437 \u0441\u0442\u0430\u0440\u0448\u0438\u0445 32 \u0431\u0438\u0442 \u0447\u0438\u0441\u043b\u0430,  \u0437\u0430\u0442\u0435\u043c \u0442\u0440\u0430\u043d\u0441\u0444\u043e\u0440\u043c\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u0432\u043e Float \u0442\u0438\u043f *\/ inline val first: Float     get() = floatFromBits((packedValue shr 32).toInt())  \/* \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c \u0430\u043d\u0430\u043b\u043e\u0433\u0438\u0447\u0435\u043d \u0438\u0437\u0432\u043b\u0435\u0447\u0435\u043d\u0438\u044e \u043f\u0435\u0440\u0432\u043e\u0433\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f,  \u0442\u043e\u043b\u044c\u043a\u043e \u0431\u0438\u0442\u043e\u0432\u043e\u0435 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u0438\u0437\u0432\u043b\u0435\u043a\u0430\u0435\u0442\u0441\u044f \u0438\u0437 \u043c\u043b\u0430\u0434\u0448\u0438\u0445 32 \u0431\u0438\u0442 *\/ inline val second: Float     get() = floatFromBits((packedValue and 0xFFFFFFFF).toInt())  inline fun packFloats(val1: Float, val2: Float): Long {     \/* \u043f\u0440\u0435\u0432\u0440\u0430\u0449\u0430\u0435\u043c \u043a\u0430\u0436\u0434\u043e\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 Float \u0432 \u0431\u0438\u0442\u043e\u0432\u043e\u0435 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u0442\u0438\u043f\u0430 Int,      \u0434\u043b\u044f \u0434\u0430\u043b\u044c\u043d\u0435\u0439\u0448\u0438\u0445 \u0431\u0438\u0442\u043e\u0432\u044b\u0445 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0439 \u043f\u0435\u0440\u0435\u0432\u043e\u0434\u0438\u043c \u0432 Long *\/     val v1 = val1.toRawBits().toLong()     val v2 = val2.toRawBits().toLong()     \/\/ \u0442\u0430\u043a\u0436\u0435 \u043a\u0430\u043a \u0432 IntIntPair \u0437\u0430\u043f\u0430\u043a\u043e\u0432\u044b\u0432\u0430\u0435\u043c \u0434\u0432\u0430 \u0447\u0438\u0441\u043b\u0430 \u0442\u0438\u043f\u0430 Int \u0432 \u043e\u0434\u0438\u043d Long     return (v1 shl 32) or (v2 and 0xFFFFFFFF) }  inline fun floatFromBits(bits: Int): Float = java.lang.Float.intBitsToFloat(bits) inline fun Float.toRawBits(): Int = java.lang.Float.floatToRawIntBits(this)<\/code><\/pre>\n<p>\u0411\u043e\u043b\u0435\u0435 \u0434\u0435\u0442\u0430\u043b\u044c\u043d\u043e\u0435 \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u0430 \u043f\u0440\u0435\u0432\u0440\u0430\u0449\u0435\u043d\u0438\u044f \u0447\u0438\u0441\u043b\u0430 Float \u0432 \u0431\u0438\u0442\u043e\u0432\u043e\u0435 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u0435 Int \u0438 \u043e\u0431\u0440\u0430\u0442\u043d\u043e \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442\u0441\u044f \u0432 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u0438 \u043f\u043e \u043c\u0435\u0442\u043e\u0434\u0430\u043c <a href=\"https:\/\/docs.oracle.com\/javase%2F7%2Fdocs%2Fapi%2F%2F\/java\/lang\/Float.html#intBitsToFloat(int)\" rel=\"noopener noreferrer nofollow\">Float.intBitsToFloat<\/a> \u0438 <a href=\"https:\/\/docs.oracle.com\/javase%2F7%2Fdocs%2Fapi%2F%2F\/java\/lang\/Float.html#floatToRawIntBits(float)\" rel=\"noopener noreferrer nofollow\">Float.floatToRawIntBits<\/a>.<\/p>\n<p><em>3.<\/em> <a href=\"https:\/\/developer.android.com\/reference\/androidx\/collection\/LongLongPair\" rel=\"noopener noreferrer nofollow\">LongLongPair<\/a> &#8212; \u043f\u0440\u043e\u0441\u0442\u0435\u0439\u0448\u0430\u044f \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u0434\u043b\u044f \u0434\u0432\u0443\u0445 \u0447\u0438\u0441\u0435\u043b \u0442\u0438\u043f\u0430 Long:<\/p>\n<pre><code class=\"kotlin\">class LongLongPair(val first: Long, val second: Long) { ... }<\/code><\/pre>\n<p>\u0412\u044b\u0438\u0433\u0440\u044b\u0432\u0430\u0435\u0442 \u043f\u0435\u0440\u0435\u0434 <a href=\"https:\/\/developer.android.com\/reference\/android\/util\/Pair\" rel=\"noopener noreferrer nofollow\">Pair<\/a>&lt;Long, Long> \u0432 \u043f\u0430\u043c\u044f\u0442\u0438, \u0442\u0430\u043a \u043a\u0430\u043a \u0434\u043b\u044f \u0432\u0441\u0435\u0445 \u043e\u0431\u043e\u0431\u0449\u0435\u043d\u043d\u044b\u0445 \u0442\u0438\u043f\u043e\u0432 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442\u0441\u044f <a href=\"https:\/\/docs.oracle.com\/javase\/tutorial\/java\/data\/numberclasses.html\" rel=\"noopener noreferrer nofollow\">\u043a\u043b\u0430\u0441\u0441\u044b \u043e\u0431\u0435\u0440\u0442\u043a\u0438<\/a>, \u0430 \u043d\u0435 \u043f\u0440\u0438\u043c\u0438\u0442\u0438\u0432\u043d\u044b\u0435 \u0442\u0438\u043f\u044b.<\/p>\n<p>\u0412\u043e \u0432\u0441\u0435\u0445 \u0432\u044b\u0448\u0435\u043f\u0435\u0440\u0435\u0447\u0438\u0441\u043b\u0435\u043d\u043d\u044b\u0445 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f\u0445 \u043f\u0430\u0440 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439 \u0435\u0441\u0442\u044c \u043f\u0435\u0440\u0435\u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u0435 \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440\u043e\u0432 component1 \u0438 component2 \u0434\u043b\u044f \u043a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0439<a href=\"https:\/\/kotlinlang.org\/docs\/destructuring-declarations.html\" rel=\"noopener noreferrer nofollow\"> \u0434\u0435\u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0438\u0437\u0430\u0446\u0438\u0438<\/a>:<\/p>\n<pre><code class=\"kotlin\">val (firstInt, secondInt) = IntIntPair(3, 7) val (firstLong, secondLong) = LongLongPair(2021, 2023) val (firstFloat, secondFloat) = FloatFloatPair(0.33f, 0.45f)<\/code><\/pre>\n<h2>\u0425\u044d\u0448-\u0442\u0430\u0431\u043b\u0438\u0446\u044b<\/h2>\n<p>\u041d\u0430\u0441\u0442\u0430\u043b \u043c\u043e\u043c\u0435\u043d\u0442 \u0437\u0430\u0433\u043b\u044f\u043d\u0443\u0442\u044c \u0432 \u0441\u0430\u043c\u0443\u044e \u0441\u043b\u043e\u0436\u043d\u0443\u044e \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u0438\u0447\u0435\u0441\u043a\u0443\u044e \u0447\u0430\u0441\u0442\u044c \u044d\u0442\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0438, \u0433\u043e\u0442\u043e\u0432 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u0432\u0430\u043c, \u043d\u043e\u0432\u0430\u044f \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f <a href=\"https:\/\/docs.oracle.com\/javase\/8\/docs\/api\/java\/util\/HashMap.html\" rel=\"noopener noreferrer nofollow\">HashMap<\/a>:<\/p>\n<pre><code class=\"kotlin\">\/\/ \u043e\u0431\u043e\u0431\u0449\u0451\u043d\u043d\u044b\u0439 \u0432\u0430\u0440\u0438\u0430\u043d\u0442 \u0445\u044d\u0448-\u0442\u0430\u0431\u043b\u0438\u0446\u044b val scatterMap: ScatterMap&lt;String, String> = mutableScatterMapOf()  \/\/ \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u0445\u044d\u0448-\u0442\u0430\u0431\u043b\u0438\u0446 \u0434\u043b\u044f \u043f\u0440\u0438\u043c\u0438\u0442\u0438\u0432\u043d\u044b\u0445 \u0442\u0438\u043f\u043e\u0432, \u0430\u043d\u0430\u043b\u043e\u0433\u0438\u0447\u043d\u044b\u0435 \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u044b \u0435\u0441\u0442\u044c \u0434\u043b\u044f Long \u0438 Float intIntMapOf() intFloatMapOf() intLongMapOf() intObjectMapOf&lt;String>()  \/\/ \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u044b \u0434\u043b\u044f \u0441\u043b\u0443\u0447\u0430\u0435\u0432, \u043a\u043e\u0433\u0434\u0430 \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u043a\u043b\u044e\u0447\u0430 \u043e\u0434\u0438\u043d \u0438\u0437 \u043f\u0440\u0438\u043c\u0438\u0442\u0438\u0432\u043d\u044b\u0445 \u0442\u0438\u043f\u043e\u0432: Int, Long \u0438\u043b\u0438 Float intObjectMapOf&lt;String>() longObjectMapOf&lt;String>() floatObjectMapOf&lt;String>()  \/* P.S. \u043f\u043e\u0445\u043e\u0436\u0438\u0435 \u0448\u0442\u0443\u043a\u0438 \u043d\u0430 intIntMapOf(), intLongMapOf() \u0438 intObjectMapOf()  \u0435\u0441\u0442\u044c \u0432 android.util \u043f\u0430\u043a\u0435\u0442\u0435 - SparseIntArray, SparseLongArray  \u0438 SparseArray \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0435\u043d\u043d\u043e *\/<\/code><\/pre>\n<p>\u041f\u043e\u043b\u0430\u0433\u0430\u044e \u0432\u044b \u0443\u0436\u0435 \u0434\u043e\u0433\u0430\u0434\u0430\u043b\u0438\u0441\u044c, \u0447\u0442\u043e \u0432\u0441\u0435 \u044d\u0442\u0438 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u0431\u044b\u043b\u0438 \u0441\u043e\u0437\u0434\u0430\u043d\u044b, \u0442\u0430\u043a\u0436\u0435 \u043a\u0430\u043a \u0438 \u0440\u0430\u043d\u0435\u0435 \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0435\u043d\u043d\u044b\u0435 \u0441\u043f\u0438\u0441\u043a\u0438, \u043f\u043e\u0434 \u043a\u043e\u043f\u0438\u0440\u043a\u0443 \u043d\u0430 \u043e\u0441\u043d\u043e\u0432\u0435 \u043e\u0431\u043e\u0431\u0449\u0451\u043d\u043d\u043e\u0439 \u0432\u0435\u0440\u0441\u0438\u0438:<\/p>\n<pre><code class=\"kotlin\">sealed class ScatterMap&lt;K, V> {     \/\/ \u043c\u0435\u043d\u044f\u044e\u0442\u0441\u044f \u0431\u0443\u043a\u0432\u0430\u043b\u044c\u043d\u043e \u0442\u043e\u043b\u044c\u043a\u043e \u0442\u0438\u043f\u044b \u0434\u043b\u044f \u043c\u0430\u0441\u0441\u0438\u0432\u043e\u0432 \u043a\u043b\u044e\u0447\u0435\u0439 \u0438 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439     var keys: Array&lt;Any?> = EMPTY_OBJECTS     var values: Array&lt;Any?> = EMPTY_OBJECTS     \/\/ \u043e\u0441\u0442\u0430\u043b\u044c\u043d\u0430\u044f \u043b\u043e\u0433\u0438\u043a\u0430 \u043e\u0441\u0442\u0430\u0451\u0442\u0441\u044f \u043d\u0435\u0438\u0437\u043c\u0435\u043d\u043d\u043e\u0439 }  sealed class IntIntMap {     \/\/ \u0442\u0438\u043f\u044b \u0431\u044b\u043b\u0438 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u044b \u043d\u0430 \u043f\u0440\u0438\u043c\u0438\u0442\u0438\u0432\u043d\u044b\u0435     var keys: IntArray = EmptyIntArray     var values: IntArray = EmptyIntArray     \/\/ \u043b\u043e\u0433\u0438\u043a\u0430 \u0430\u0431\u0441\u043e\u043b\u044e\u0442\u043d\u043e \u043d\u0435 \u043f\u043e\u043c\u0435\u043d\u044f\u043b\u0430\u0441\u044c \u0438 \u0431\u044b\u043b\u0430 \u0441\u043a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u043d\u0430 \u0438\u0437 ScatterMap }  sealed class IntObjectMap&lt;V> {     \/\/ \u0442\u0430\u043a\u0430\u044f \u0436\u0435 \u0438\u0441\u0442\u043e\u0440\u0438\u044f...     var keys: IntArray = EmptyIntArray     var values: Array&lt;Any?> = EMPTY_OBJECTS }  \/* P.S. \u0422\u0430\u043a\u043e\u0439 \u043f\u043e\u0434\u0445\u043e\u0434 \u043c\u043e\u0436\u0435\u0442 \u043f\u043e\u043a\u0430\u0437\u0430\u0442\u044c\u0441\u044f \u0438\u0437\u0431\u044b\u0442\u043e\u0447\u043d\u044b\u043c \u0442\u0430\u043a \u043a\u0430\u043a  \u043e\u0434\u0438\u043d\u0430\u043a\u043e\u0432\u0430\u044f \u043b\u043e\u0433\u0438\u043a\u0430 \u043a\u043e\u043f\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u043f\u0440\u044f\u043c\u043e \u0432 \u043b\u043e\u0431, \u043d\u0430 \u0441\u0430\u043c\u043e\u043c \u0434\u0435\u043b\u0435 \u043e\u0441\u043e\u0431\u043e\u0433\u043e \u043f\u0440\u043e\u0438\u0433\u0440\u044b\u0448\u0430  \u0432 \u044d\u0442\u043e\u043c \u043d\u0435\u0442 \u0438 \u043b\u044e\u0431\u044b\u0435 \u043d\u0435\u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u044b\u0435 \u043a\u043b\u0430\u0441\u0441\u044b \u043b\u0435\u0433\u043a\u043e \u0432\u044b\u043f\u0438\u043b\u0438\u0432\u0430\u044e\u0442\u0441\u044f  \u0441\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u043c\u0438 \u0441\u0438\u0441\u0442\u0435\u043c\u0430\u043c\u0438 \u0441\u0431\u043e\u0440\u043a\u0438. *\/<\/code><\/pre>\n<p>\u0421\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u0432\u0437\u044f\u0442\u044c \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044e <a href=\"https:\/\/developer.android.com\/reference\/kotlin\/androidx\/collection\/ScatterMap\" rel=\"noopener noreferrer nofollow\">ScatterMap<\/a> \/ <a href=\"https:\/\/developer.android.com\/reference\/kotlin\/androidx\/collection\/MutableScatterMap\" rel=\"noopener noreferrer nofollow\">MutableScatterMap<\/a> \u0438 \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u0435\u0451 \u043f\u043e\u0434 \u043a\u0430\u043f\u043e\u0442\u043e\u043c, \u043b\u043e\u0433\u0438\u043a\u0430 \u043e\u0441\u0442\u0430\u043b\u044c\u043d\u044b\u0445 \u043d\u0438\u0447\u0435\u043c \u043d\u0435 \u0431\u0443\u0434\u0435\u0442 \u043e\u0442\u043b\u0438\u0447\u0430\u0442\u044c\u0441\u044f.<\/p>\n<p>\u041f\u0440\u0438\u0441\u0442\u0443\u043f\u0438\u043c \u043a \u0438\u0437\u0443\u0447\u0435\u043d\u0438\u044e!<\/p>\n<h4>\u041a\u0430\u043a ScatterMap \u0445\u0440\u0430\u043d\u0438\u0442 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044e \u043e \u043f\u0430\u0440\u0430\u0445 \u043a\u043b\u044e\u0447 \/ \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435<\/h4>\n<p>\u041c\u0435\u0445\u0430\u043d\u0438\u0437\u043c \u0445\u0440\u0430\u043d\u0435\u043d\u0438\u044f \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438 \u043e \u0437\u0430\u043f\u0438\u0441\u044f\u0445 \u043a\u043b\u044e\u0447 \/ \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u043e\u0442\u043b\u0438\u0447\u0430\u0435\u0442\u0441\u044f \u043e\u0442 HashMap, \u0433\u0434\u0435 \u0432\u0441\u0435 \u043b\u0435\u0436\u0438\u0442 \u0432 \u043e\u0434\u043d\u043e\u043c \u043c\u0430\u0441\u0441\u0438\u0432<\/p>\n<p>\u0435 Map.Entry \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u0432, \u0432 ScatterMap \u0434\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0439 \u043c\u0430\u0441\u0441\u0438\u0432 \u043c\u0435\u0442\u0430\u0434\u0430\u043d\u043d\u044b\u0445:<\/p>\n<pre><code class=\"kotlin\">internal var metadata: LongArray = EmptyGroup<\/code><\/pre>\n<p>\u0433\u0434\u0435 \u0435\u0434\u0438\u043d\u0438\u0446\u0435\u0439 \u0445\u0440\u0430\u043d\u0438\u043c\u043e\u0439 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f 8 \u0431\u0438\u0442, \u043a\u043e\u0442\u043e\u0440\u044b\u043c\u0438 \u043c\u043e\u0436\u043d\u043e \u0441\u043e\u0445\u0440\u0430\u043d\u0438\u0442\u044c \u043e\u0434\u043d\u043e \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u0440\u043e\u0432\u043d\u043e \u0434\u043b\u044f \u043e\u0434\u043d\u043e\u0439 \u0437\u0430\u043f\u0438\u0441\u0438 \u0445\u044d\u0448-\u0442\u0430\u0431\u043b\u0438\u0446\u044b.<\/p>\n<p>\u0421\u043f\u0438\u0441\u043e\u043a \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u044b\u0445 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0439 \u0438 \u0438\u0445 8-\u043c\u0438 \u0431\u0438\u0442\u043e\u0432\u0430\u044f \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c:<\/p>\n<ol>\n<li>\n<p>\u041f\u0443\u0441\u0442\u043e\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 &#8212; 10000000<\/p>\n<\/li>\n<li>\n<p>\u041a\u043e\u043d\u0435\u0446 \u0442\u0430\u0431\u043b\u0438\u0446\u044b &#8212; 11111111, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u043f\u0440\u0438 \u0438\u0442\u0435\u0440\u0430\u0446\u0438\u0438 \u043f\u043e \u0442\u0430\u0431\u043b\u0438\u0446\u0435, \u0447\u0442\u043e\u0431\u044b \u043e\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c\u0441\u044f \u043d\u0430 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0435\u0439 \u0437\u0430\u043f\u0438\u0441\u0438<\/p>\n<\/li>\n<li>\n<p>\u0423\u0434\u0430\u043b\u0451\u043d\u043d\u043e\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 &#8212; 11111110<\/p>\n<\/li>\n<li>\n<p>\u0417\u0430\u043f\u043e\u043b\u043d\u0435\u043d\u043d\u043e\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 &#8212; \u0445\u0440\u0430\u043d\u0438\u0442 \u043c\u043b\u0430\u0434\u0448\u0438\u0435 7 \u0431\u0438\u0442 \u0445\u044d\u0448\u0430 \u043a\u043b\u044e\u0447\u0430, \u0432\u0435\u0440\u043d\u0451\u043c\u0441\u044f \u043a \u044d\u0442\u043e\u043c\u0443 \u0447\u0443\u0442\u044c \u043f\u043e\u0437\u0436\u0435<\/p>\n<\/li>\n<\/ol>\n<p>\u0414\u0443\u043c\u0430\u044e \u043d\u0435 \u0441\u0435\u043a\u0440\u0435\u0442, \u0447\u0442\u043e Long \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f 64 \u0431\u0438\u0442\u043d\u044b\u043c \u0447\u0438\u0441\u043b\u043e\u043c \u0438 \u0431\u044b\u043b\u043e \u0431\u044b \u043f\u0435\u0447\u0430\u043b\u044c\u043d\u043e \u0445\u0440\u0430\u043d\u0438\u0442\u044c \u0432 \u043d\u0451\u043c \u0442\u043e\u043b\u044c\u043a\u043e 8 \u0431\u0438\u0442, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0431\u044b\u043b\u0430 \u0432\u0432\u0435\u0434\u0435\u043d\u0430 \u043a\u043e\u043d\u0446\u0435\u043f\u0446\u0438\u044f \u0433\u0440\u0443\u043f\u043f\u044b:<\/p>\n<p><em>\u0413\u0440\u0443\u043f\u043f\u0430 &#8212; \u043d\u0430\u0431\u043e\u0440 \u0438\u0437 8-\u043c\u0438 \u0431\u0438\u0442\u043d\u044b\u0445 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0439 \u0438\u043b\u0438 \u0441\u043b\u043e\u0442\u043e\u0432, \u043a\u0430\u043a \u044d\u0442\u043e \u043f\u0440\u0438\u043d\u044f\u0442\u043e \u0432 \u0442\u0435\u0440\u043c\u0438\u043d\u043e\u043b\u043e\u0433\u0438\u0438 ScatterMap, \u0432 \u0434\u0430\u043d\u043d\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u044d\u0442\u043e \u0447\u0438\u0441\u043b\u043e Long, \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u043c\u043e\u0436\u0435\u0442 \u0445\u0440\u0430\u043d\u0438\u0442\u044c 8 \u0441\u043b\u043e\u0442\u043e\u0432, \u0430 \u044d\u0442\u043e \u0437\u043d\u0430\u0447\u0438\u0442 \u0447\u0442\u043e \u0440\u0430\u0437\u043c\u0435\u0440 \u0433\u0440\u0443\u043f\u043f\u044b \u0440\u0430\u0432\u0435\u043d 8.<\/em><\/p>\n<p>\u0415\u0441\u0442\u044c \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u044b\u0439 \u043c\u043e\u043c\u0435\u043d\u0442 \u043d\u0430\u0441\u0447\u0435\u0442 \u0433\u0440\u0443\u043f\u043f \u0432 \u0438\u0441\u0445\u043e\u0434\u043d\u043e\u043c \u043a\u043e\u0434\u0435 ScatterMap:<\/p>\n<pre><code class=\"kotlin\">\/\/ \u0440\u0430\u0437\u043c\u0435\u0440 \u0433\u0440\u0443\u043f\u043f\u044b, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043c\u044b \u0443\u0436\u0435 \u0432\u044b\u0447\u0438\u0441\u043b\u0438\u043b\u0438 const val GroupWidth = 8  \/* \u043f\u0440\u0438 \u0447\u0442\u0435\u043d\u0438\u0438 \u043a\u043e\u0434\u0430 \u0441\u043b\u043e\u0436\u043d\u043e \u0431\u044b\u043b\u043e \u0430\u0431\u0441\u0442\u0440\u0430\u0433\u0438\u0440\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u043e\u0442 \u0447\u0438\u0441\u043b\u0430 Long \u0438\u0437-\u0437\u0430  \u0431\u0438\u0442\u043e\u0432\u043e\u0439 \u0430\u0440\u0438\u0444\u043c\u0435\u0442\u0438\u043a\u0438, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u044d\u0442\u043e\u0442 typealias \u043d\u0438 \u0440\u0430\u0437 \u043c\u0435\u043d\u044f \u0441\u0431\u0438\u0432\u0430\u043b \u0441 \u0442\u043e\u043b\u043a\u0443 *\/ typealias Group = Long<\/code><\/pre>\n<p>\u041f\u0440\u0438 \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u043c \u043f\u0440\u043e\u0445\u043e\u0434\u0435 \u043f\u043e \u043c\u0430\u0441\u0441\u0438\u0432\u0443 \u043c\u0435\u0442\u0430\u0434\u0430\u043d\u043d\u044b\u0445 \u0437\u0430<\/p>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[],"tags":[],"class_list":["post-375094","post","type-post","status-publish","format-standard","hentry"],"_links":{"self":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/375094","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=375094"}],"version-history":[{"count":0,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/375094\/revisions"}],"wp:attachment":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=375094"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=375094"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=375094"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}