Array
- 하나의 변수에 여러 개의 정해진 값을 담을 수 있게 해주는 데이터 타입
- 처음 정해진 값의 개수는 바꿀 수 없음
- 배열 객체는 Int, Long, Char 등과 같은 타입 뒤에 Array를 붙여서 만듦
var 변수 = Array(개수)
var students = IntArray(10)
var longArray = LongArray(10)
var CharArray = CharArray(10)
var FloatArray = FlaotArray(10)
var DoubleArray = DoubleArray(10)
문자 배열에 빈 공간 할당
var stringArray = Array(10, { item -> "" })
값으로 배열 공간 할당
var dayArray = arrayOf("MON", "TUE", "WED", "THU", "FRI", "SAT", "SUN")
배열에 값 입력
배열명[인덱스] = 값
배열명.set(인덱스, 값)
students[0] = 90
students.set(1, 91)
...
students.set(8, 98)
students[9] = 99
배열에 있는 값 꺼내기
배열명[인덱스]
배열명.get(인덱스)
var seventhValue = intArray[6]
var tenthValue = intArray.get(9)
Collection
- 여러 개의 값을 담을 수 있는 배열은 값의 개수가 증가하면 사용할 수 없는 단점이 있기 때문에 동적으로 크기를 변경할 수 있도록 만들어진 동적 배열
- 동적 배열에는 크게 List, Set, Map 세 가지의 데이터 타입이 있음
List
- Collection의 한 종류로 인덱스를 사용하는 데이터 타입
- 인덱스가 있기 때문에 중복된 값을 넣을 수도 있음
리스트 생성 mutableListOf
- 아래와 같이 작성하면 변수에 "A", "B", "C" 3개의 값을 가진 크기가 3인 동적 배열 리스트가 생성됨
var mutableList = mutableListOf("A", "B", "C")
리스트에 값 추가 add
- add 함수로 값을 추가
- 값이 추가되면서 동적으로 리스트의 공간이 자동으로 증가
mutableList.add("D")
- "A": [0], "B": [1], "C": [2] → "A": [0], "B": [1], "C": [2], "D":[3]
리스트에 입력된 값 사용 get
- get 함수로 리스트에서 값을 꺼냄
- add 함수와는 다르게 사용할 때 인덱스를 지정하여 몇 번째 값을 꺼낼 것인지 입력해야 함
var variable = mutableList.get(1)
리스트 값 수정하기 set
mutableList.set(1, "F")
리스트에 입력된 값 제거 removeAt
- removeAt 함수로 리스트에 입력된 값의 인덱스를 지정해서 삭제
mutableList.removeAt(1)
- 두 번째 값을 삭제하면 세 번째 값부터 인덱스가 하나씩 감소하면서 빈자리의 인덱스로 이동
- "A": [0], "B": [1], "C": [2] → "A": [0], "C": [1]
빈 리스트 사용
- 빈 리스트는 앞으로 입력되는 값의 데이터 타입을 알 수 없기 때문에 값의 타입도 추론할 수 없음
- 빈 컬렉션의 경우 데이터 타입을 직접적으로 알려주는 방법을 사용해야 함
var 변수명 = mutableListOf<컬렉션에 입력될 값의 타입>()
var stringList = mutableListOf<String>()
컬렉션 개수 가져오기 size
- size 프로퍼티를 사용하면 컬렉션의 개수를 가져올
수 있음
- mutableList.size
Set
- 리스트에서 인덱스가 빠진 데이터 타입
- 인덱스로 조회x, get 함수 지원x
- 값을 중복해서 넣을 수 없음
var set = mutableListOf<String>()
빈 셋으로 초기화하고 값 입력
var set = mutableSetOf<String>()
set.add("green")
set.add("pink")
set.add("purple")
set.add("pink") // 동일한 값은 입력x
셋의 값 인덱싱
- set은 인덱스로 조회하는 함수가 없기 때문에 특정 위치의 값을 사용할 수 없음
셋의 값 삭제
- set은 값이 중복되지 않고, 인덱스로 불러올 수 없기 때문에 값을 직접 삭제해야 함
set.remove("purple")
Map
- Key와 Value를 쌍으로 갖는 데이터 타입
- Map의 Key는 리스트의 인덱스와 비슷하지만 Map에서는 Key를 직접 입력해야 함
- 인덱스에 해당하는 키를 지접 지정해서 사용해야 함
var map = mutableMapOf<String, String>()
빈 맵으로 생성하고 값 추가: put(key, value)
- key와 value를 추가할 때마다 리스트처럼 맵의 공간이 늘어남
var map = mutableMapOf<String, String>()
map,put("key1", "value1")
map,put("key2", "value3")
map,put("key3", "value3")
맵 사용: get()
Log.d("CollectionMap", "map에 입력된 key1의 값은 ${map.get("key1")}")
// [로그캣 출력 내용]
// map에 입력된 key1의 값은 value2.
맵 수정: put(key, value)
- put 함수를 사용할 때 동일한 key를 가진 값이 있으면 key는 유지된 채로 그 value만 수정
map.put("key2", "수정")
맵 삭제: remove(key)
- 리스트와는 달리 인덱스에 해당하는 키의 값이 변경되지 않고 그대로 유지됨
map.remove("key2")
- {(key1: value1), (key2: 수정), (key3: value3)} → {(key1: value1), (key3: value3)}
함수와 프로퍼티 구분 방법: 괄호의 유무
Collection 값의 단위 = Element