Kotlin 컬렉션은 List / Set / Map으로 나뉘며, 각각 읽기 전용과 가변 형태가 있다.
List<T>, Set<T>, Map<K, V>MutableList<T>, MutableSet<T>, MutableMap<K, V>읽기 전용은 인터페이스 제약일 뿐, 객체가 절대 변하지 않는다는 의미의 “진짜 불변”을 보장하지 않는다.
List: 순서가 있는 목록, 추가·삭제 불가MutableList: 순서가 있는 목록, 추가·삭제 가능val l: List<Int> = listOf(1, 2, 3)
val m: MutableList<Int> = mutableListOf(1, 2, 3)
println(l[0]) // 인덱스 접근
println(m.size) // 크기 조회
m.add(4)
m.remove(2)
println(m) // [1, 3, 4]
ArrayList<T>는 구현체 이름이다.mutableListOf()는 보통 ArrayList 기반으로 생성된다.val a: ArrayList<String> = arrayListOf("A", "B")
val b: MutableList<String> = mutableListOf("A", "B")
java.util.LinkedList를 직접 사용val ll = java.util.LinkedList<Int>()
ll.addFirst(10)
ll.addLast(20)
println(ll) // [10, 20]
val s: Set<Int> = setOf(1, 2, 2, 3) // {1, 2, 3}
val ms: MutableSet<Int> = mutableSetOf(1, 2)
ms.add(2) // 변화 없음
ms.add(3) // {1, 2, 3}
자주 쓰는 구현체
HashSet : 일반 집합LinkedHashSet : 삽입 순서 유지TreeSet : 항상 정렬 상태 유지val sorted = sortedSetOf(3, 1, 2) // TreeSet 기반
println(sorted) // [1, 2, 3]
val m1: Map<String, Int> = mapOf("A" to 1, "B" to 2)
val m2: MutableMap<String, Int> = mutableMapOf("A" to 1)
m2["B"] = 2 // 추가/수정
println(m2["A"]) // 조회
m2.remove("A") // 삭제
자주 쓰는 구현체
HashMap : 일반 맵LinkedHashMap : 삽입 순서 유지TreeMap : Key 기준 정렬 유지val sortedMap = sortedMapOf(2 to "two", 1 to "one")
println(sortedMap) // {1=one, 2=two}
항상 정렬 규칙을 유지해야 할 때 TreeSet과 TreeMap을 사용한다. 요소의 자연 순서나 Comparator로 기준을 지정한다.
data class Item(val name: String, val price: Int)
val byPrice = java.util.TreeSet<Item>(
compareBy(Item::price).thenBy(Item::name)
)
byPrice.add(Item("A", 1200))
byPrice.add(Item("B", 800))
println(byPrice) // 가격→이름 순으로 정렬된 상태로 보관
listOfmutableListOfmutableSetOf 또는 HashSetmutableMapOf 또는 HashMapsortedSetOf 또는 sortedMapOfLinkedHashSet, LinkedHashMapval nums = listOf(1, 2, 3, 4, 5)
val even = nums.filter { it % 2 == 0 } // [2, 4]
val doubled = nums.map { it * 2 } // [2, 4, 6, 8, 10]
nums.forEach { println(it) } // 요소 순회