[Kotlin]Collectionsについて


💡 Collectionとは?


CollectionsはList,set,mapなどからなるデータ構造であり,複数のオブジェクトを効率的に管理するための集合と見なすことができる.

コトリンでのコレクションは上の写真のように構成されています.
Javaとは異なり、MutableとImmutableに分かれています.
Mutableは変えることができて、変わらないのは変わらない.
価格の性質が使用の違いを決める
なぜCollectionを書くのですか?

集合を使う理由は大きく3つあります。


1.一貫性のあるAPI
->CollectionのコンシステンシAPIを使用してCollectionの下部にあるすべてのクラス(ArrayList、Vector、LinkedListなど)Collectionから継承し、統合されたメソッドを使用する
2.プログラミング作業量の削減
->オブジェクト向けプログラミング抽象化の基本概念を成功裏に体現
3.速度と品質の向上
->有用なデータ構造とアルゴリズムにより、パフォーマンスが向上します.Collectionを使用して最適化を実現することを考慮する必要はなく、Collection APIを簡単に使用すればよい.
(注:https://crazykim2.tistory.com/557)
Collectionsについて詳しく説明します.

List


Listは、データが格納または削除される際に順守される集合である.
ListはMutableとImmutableを同時にサポートしている.
ImmutableList(不変)
listof(item)を使用して作成および初期化できます.タイプ推論を提供するため、コトリンでは省略することができます.immutableではgetしかできません.
val fruits= listOf<String>("apple", "banana", "kiwi", "peach")
// val fruits= listOf("apple", "banana", "kiwi", "peach") -> 타입 생략 가능
println("fruits.size: ${fruits.size}")
println("fruits.get(2): ${fruits.get(2)}")
println("fruits[3]: ${fruits[3]}")
println("fruits.indexOf(\"peach\"): ${fruits.indexOf("peach")}")
実行結果
fruits.size: 4
fruits.get(2): kiwi
fruits[3]: peach
fruits.indexOf("peach"): 3
Mutable(可変)
mutableは、宣言時にmutableListof(item)形式で宣言する.
削除可能追加可能
val fruits= mutableListOf<String>("apple", "banana", "kiwi", "peach")
fruits.remove("apple")
fruits.add("grape")
println("fruits: $fruits")

fruits.addAll(listOf("melon", "cherry"))
println("fruits: $fruits")
fruits.removeAt(3)
println("fruits: $fruits")
実行結果
fruits: [banana, kiwi, peach, grape]
fruits: [banana, kiwi, peach, grape, melon, cherry]
fruits: [banana, kiwi, peach, melon, cherry]
このほか、replace、replaceAll、contains、forEachなどの方法もサポートされています.

Set


不変
setof(items)で生成できます.
val numbers = setOf<Int>(33, 22, 11, 1, 22, 3)
println(numbers)
println("numbers.size: ${numbers.size}")
println("numbers.contains(1): ${numbers.contains(1)}")
println("numbers.isEmpty(): ${numbers.isEmpty()}")
実行結果
[33, 22, 11, 1, 3]
numbers.size: 5
numbers.contains(1): true
numbers.isEmpty(): false
Mutable(可変)
MutableはmutableSetOf(items)によって生成される.
val numbers = mutableSetOf<Int>(33, 22, 11, 1, 22, 3)
println(numbers)
numbers.add(100)
numbers.remove(33)
println(numbers)
実行結果
[33, 22, 11, 1, 3]
[22, 11, 1, 3, 100]

Map


keyとvalueのペアで格納されたセット.keyは唯一で、繰り返しは許されません.
不変
mapof.
pairオブジェクトはアイテムを表し、pairにkeyとvalueを入れることができます.
pair(A,B)は、toがinfixであるため、A to Bで表すことができる.
val numbersMap = mapOf<String, String>(
  "1" to "one", "2" to "two", "3" to "three")
println("numbersMap: $numbersMap")
val numbersMap2 = mapOf(Pair("1", "one"), Pair("2", "two"), Pair("3", "three"))
println("numbersMap2: $numbersMap2")

// 실행해보면 모두 동일한 값을 갖고 있다.
// numbersMap: {1=one, 2=two, 3=three}
// numbersMap2: {1=one, 2=two, 3=three}
また、getterはget(index)と[inndex]を同時にサポートします.
val numbersMap = mapOf<String, String>(
  "1" to "one", "2" to "two", "3" to "three")
println("numbersMap.get(\"1\"): ${numbersMap.get("1")}")
println("numbersMap[\"1\"]: ${numbersMap["1"]}")
println("numbersMap[\"1\"]: ${numbersMap.values}")
println("numbersMap keys:${numbersMap.keys}")
println("numbersMap values:${numbersMap.values}")

for (value in numbersMap.values) {
  println(value)
}
実行結果
numbersMap.get("1"): one
numbersMap["1"]: one
numbersMap["1"]: [one, two, three]
numbersMap keys:[1, 2, 3]
numbersMap values:[one, two, three]
one
two
three
Mutable(可変)
MutableはmutableMapOf形式で生成される
オブジェクトの追加にはputを使用します.
val numbersMap = mutableMapOf<String, String>(
      "1" to "one", "2" to "two", "3" to "three")
println("numbersMap: $numbersMap")

numbersMap.put("4", "four")
numbersMap["5"] = "five"
println("numbersMap: $numbersMap")

numbersMap.remove("1")
println("numbersMap: $numbersMap")

numbersMap.clear()
println("numbersMap: $numbersMap")
実行結果
numbersMap: {1=one, 2=two, 3=three}
numbersMap: {1=one, 2=two, 3=three, 4=four, 5=five}
numbersMap: {2=two, 3=three, 4=four, 5=five}
numbersMap: {}
JAVAの集合と非常に類似しており,Kotlinが可変と不可変をサポートしている点が異なる.
(注:https://codechacha.com/ko/collections-in-kotlin/)