[HeadFirst] Kotlin collections :: List
Array는 굉장히 유용했다. 하지만 Kotlin 에서 Array 는 초기화되는 순간 그 사이즈가 고정이 되어 버린다. 그리고 Array 를 val 로 선언한다 하더라도 그 내부 원소가 업데이트 되는것을 막을 수는 없다. collection 은 이러한 Array 의 단점을 극복하고, 개발자가 더 유연하게 객체들을 저장하고 관리할 수 있도록 돕는 수단이다. 여러 블로그나 stackoverflow 를 돌아다니기 보다는 정리된 자료를 보고 싶다면 Kotlin Standard Library 에서 확인해보는걸 추천한다.
List, Set, Map
Collection 에는 deque 등 다양한 자료구조를 지원하지만, 대표적으로 사용되는 자료구조는 List, Set, Map 이다. Kotlin 에서 기본적으로 제공하는 자료구조는 immutable 로 Array 와 같이 데이터 추가, 제거가 불가능하다. 대신 Mutable 인터페이스를 구현하는 MutableList, MutableSet, MutableMap 클래스를 지원한다.
List
List 는 순서가 있는 자료를 저장하는데 적합한 구조이다. Array 와 비슷한 부분이 많다.
아래는 immutableList 의 생성과 for 문 사용, contains 사용 예가 나와있다.
fun main() {
val shopping = listOf("Tea", "Eggs", "Milk")
// val shopping: List<String> = listOf("Tea", "Eggs", "Milk")
for (item in shopping) println(item)
if (shopping.contains("Milk")) {
println(shopping.indexOf("Milk"))
}
}
MutableList
fun main() {
val shopping = mutableListOf("Tea", "Eggs", "Milk")
shopping.add("Sugar")
shopping.add(1, "Salt")
if (shopping.contains("Milk")) {
shopping.remove("Milk")
}
if (shopping.size > 1) {
shopping.removeAt(1)
}
shopping.set(0, "Fish")
shopping.sort() // sort by natural order
shopping.reverse()
shopping.shuffle() // randomize oreder
val toAdd = listOf("Cookie", "Bread")
shopping.addAll(toAdd)
val toRemove = listOf("Sugar")
shopping.removeAll(toRemove)
val toRetain = listOf("Tea", "Eggs", "Salt")
shopping.retainAll(toRetain) // 주어진 list 의 원소를 제외한 나머지는 모두 remove
// 이하의 함수들은 immutable list 를 반환한다. 이름만 봐도 어떤걸 반환하는지 알 수 있다.
val shoppingCopy = shopping.toList()
val shoppingSort = shopping.toSorted()
val shoppingReverse = shopping.toReversed()
val shoppingSuffle = shopping.toShuffled()
// Mutable 의 copy 는 바로 sort, reverse, shuffle 해주는 함수는 없다. 몇단계 거쳐서 적용해야한다.
val shoppingRealCopy = shopping.toMutableList()
}
List 중간에 새로운 원소를 추가한다는 것은 뒤에 있는 원소들이 모두 1칸식 옮겨가야 한다는 것을 의미한다. 이러한 작업을 많이 하다보면 프로그램 성능을 저하시킬 수도 있겠다 싶다.
Author And Source
이 문제에 관하여([HeadFirst] Kotlin collections :: List), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@tjeong/Kotlin-collections-List저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)