μ½νλ¦°μ μ¬μ©νλ€λ³΄λ©΄ λΆλͺ ν
List
μArray
λ μλ£κ΅¬μ‘°μ 곡쑴μ μμ΄ μꡬμ¬μ νμ μ μλ€!
λ체 λκ° λ€λ₯΄κΈΈλ ꡬλΆμ§μ΄μ Έ μλ? π€ νλ λΆλ€μ μν΄ μ΄ ν¬μ€ν μ λ°μΉλ€.
λ΄λΆμ μΌλ‘ MutableList
λ₯Ό List
μΈν°νμ΄μ€μ μΊμ€ν
νμ¬ μ¬μ©ν¨
public interface List<out E> : Collection<E> {
// Query Operations
override val size: Int
override fun isEmpty(): Boolean
.
.
.
public fun indexOf(element: @UnsafeVariance E): Int
public fun lastIndexOf(element: @UnsafeVariance E): Int
public fun listIterator(): ListIterator<E>
public fun listIterator(index: Int): ListIterator<E>
public fun subList(fromIndex: Int, toIndex: Int): List<E>
}
List
μμ μΈλ±μ€λΌ ν¨μ, 'λͺ λ²μ§Έ λ°μ΄ν°μΈκ°' μ λμ μλ―Έλ₯Ό κ°κ² λ¨listOf
, mutableListOf()
λ±κ³Ό ν¨κ» 리μ€νΈλ₯Ό μμ±ν μ μμList
λ Null μ ν¬ν¨ν μ μκ³ , μ€λ³΅ μμλ₯Ό νμ©ν¨val bob = Person("Bob", 31)
val people = listOf(Person("Adam", 20), bob, bob)
val people2 = listOf(Person("Adam", 20), Person("Bob", 31), bob)
println(people == people2) // true
bob.age = 32
println(people == people2) // false
val school = listOf("mackerel", "trout", "halibut")
println(school)
// [mackerel, trout, halibut]
val myList = mutableListOf("tuna", "salmon", "shark")
myList.remove("shark")
// res36: kotlin.Boolean = true
val numbers = mutableListOf(1, 2, 3, 4)
numbers.add(5)
numbers.removeAt(1)
numbers[0] = 0
numbers.shuffle()
println(numbers)
*μ΄λ true
λ₯Ό μΆλ ₯νλ μ΄μ λ remove()
λ©μλκ° μμ μμ μ±κ³΅ μ¬λΆλ₯Ό 리ν΄νκΈ° λλ¬Έ
class Array<T> private constructor() {
val size: Int
operator fun get(index: Int): T
operator fun set(index: Int, value: T): Unit
operator fun iterator(): Iterator<T>
// ...
}
Array
λ μμ±ν μκ°, μ¬μ΄μ¦λ κ³ μ λλ©° μμ μμ λ μΆκ° λ±μ μ¬μ©ν μ μμmutableArray
μ΄λ° κ² μλκ² μλλΌ κΈ°λ³Έμ μΌλ‘ Mutable λμμ ν¨val
μΌλ‘ μ μΈνλ var
μΌλ‘ μ μΈνλ λκ°μ λμμ ν¨arrayOf
ν€μλλ₯Ό ν΅ν΄ μ μΈν μ μμ (μΆλ ₯ μ java.util.Arrays.toString()
μ¬μ©)val school = arrayOf("shark", "salmon", "minnow")
println(java.util.Arrays.toString(school))
// [shark, salmon, minnow]
val mix = arrayOf("fish", 2)
val numbers = intArrayOf(1, 2, 3)
val numbers3 = intArrayOf(4, 5, 6)
val foo2 = numbers3 + numbers
println(foo2[5]) // 3
Array
μ List
λ₯Ό ν©μΉ μλ‘μ΄ μ€μ²© List
λ₯Ό μμ±νλ κ²λ κ°λ₯val numbers = intArrayOf(1, 2, 3)
val oceans = listOf("Atlantic", "Pacific")
val oddList = listOf(numbers, oceans, "salmon")
println(oddList)
// [[I@89178b4, [Atlantic, Pacific], salmon]
*첫 λ²μ§Έ μμμ κ²½μ° Array
μΈλ°, Array λ₯Ό μΆλ ₯νλ Array Utility λ₯Ό μ¬μ©νμ§ μμΌλ©΄
μ½νλ¦°μ ν΄λΉ Array μ μ£Όμλ§μ μΆλ ₯ν¨
// [0, 2, 4, 6, 8] ννμ Array<Int> μμ±
val array = Array (5) { it * 2 }
println(java.util.Arrays.toString(array))
// ["0", "1", "4", "9", "16"] ννμ Array<String> μμ±
val asc = Array(5) { i -> (i * i).toString() }
asc.forEach { println(it) }
*μλμΌλ‘ μμ±λ it
ν€μλλ Array μ Index μν μ ν¨
val numbers = intArrayOf(1,2,3)
// Array of int [0, 0, 0, 0, 0]
val arr = IntArray(5)
// [42, 42, 42, 42, 42]
val arr = IntArray(5) { 42 }
// [0, 1, 2, 3, 4]
var arr = IntArray(5) { it * 1 }
μ΄λ°μμΌλ‘ Primitive Type Array λ₯Ό μ¬μ©νλ©΄ Boxing Overhead λ₯Ό νΌν μ μμ
μ κΈ°νκ² Array
ν΄λμ€μ μμκ΄κ³λ μμ. κ·Έλ¬λ λ©μλλ νλ‘νΌν°λ λμΌν¨!
λ€λ§ λͺ
λ°±ν Array<Int>
λ μλ°μ Integer[]
μ 맀νλκ³ ,
IntArray
λ μλ°μ int[]
μ 맀νλκΈ° λλ¬Έμ Overhead λ°©μ§λ₯Ό μν΄ κΌ κ΅¬λΆμ§μ΄ μ¬μ©ν κ²!
List
μ Array
μ ν΅μ¬ μ°¨μ΄μ Array
λ 무쑰건 κ³ μ λ μ¬μ΄μ¦λ₯Ό κ°μ§ (κ³ μ λ μ°μ λ©λͺ¨λ¦¬ λ΄μμ μμλ₯Ό μ μ₯)
λ°λ©΄ List
λ μ¬μ΄μ¦λ₯Ό λ³νν μ μμ (λΆμ°μμ μΈ λ©λͺ¨λ¦¬ 곡κ°μ κ°μ Έ λ©λͺ¨λ¦¬ κ΄λ¦¬μ μ©μ΄)
IntArray
, ByteArray
λ± Primitive νμ
μ 맀νλλ μλ£νμ μ 곡νλ Array
μ λ€λ₯΄κ²
μΌλ°μ μΈ κ²½μ° List
λ Primitive νμ
μ μ΅μ νλ (맀νλλ) ꡬνμ΄ μ‘΄μ¬νμ§ μμ
(JDK μΈλΆ λΌμ΄λΈλ¬λ¦¬ μ€ μ΄λ₯Ό μ 곡νλ λΌμ΄λΈλ¬λ¦¬κ° μκΈ΄ ν¨)
List
μ λ€λ₯΄κ² Array
λ λλ±μ± λΉκ΅λ₯Ό μ§μνμ§ μμ
μ¦, Array μ κ²½μ° κ΅¬μ± μμμ μΈλ±μ€μ κ°μ΄ λͺ¨λ κ°μλ false
λ₯Ό 리ν΄ν¨
JVM μ°¨μμμ λ΄€μ λ Array
λ arrays
λ₯Ό λ§νκ³ , List
λ java.util.List
λ₯Ό λ§ν¨
ν λ§λλ‘ λ§ν΄, Array λ μ²μλΆν° κ³ μ λ ν¬κΈ°λ₯Ό κ°κ³ List λ μ΄μ λ€λ₯΄κ² λμ μΌλ‘ νμ©ν μ μλ€λ μ μ΄ κ°μ₯ ν° μ°¨μ΄μ μ΄λ€. μ΄μ λΆν°λ μ΄ λμ μ°¨μ΄μ μ λͺ λ°±ν μκ³ μ¬μ©νλλ‘ νμ!