- 컬렉션은 코틀린에서 List, Map 그리고 Set을 사용하여 개발에 유용한 자료구조를 제공해주는 것이다.
List
var variable = listOf(값1,값2,값3,...)
- 리스트는 listOf를 불러와 (값1,값2,값3,...) 이런식으로 읽기 전용으로만 방법이 있다.
- 이는 0,1,2,... 번 인덱스에 접근해서 값을 변경할 수 없다.
var variable = mutableListOf(값1,값2,값3,...)
variabel.set(인덱스,값)
- 다음으로는 mutable을 추가해 0,1,2,...,번 인덱스에 접근해서 값을 변경할 수 있다.
- 바꾸는 방법은 변수뒤에 .set을 넣고 괄호 안에 바꿀 인덱스(제일 첫번째 값 즉 값1은 인덱스 0부터 시작한다.)번호와 바꿔서 넣어줄 숫자값을 넣어주면 된다.
var variable = ArrayList<자료형>(값1,값2,값3,...)
variable.set(인덱스,값)
- 배열 형태로 저장해서 사용하는 ArrayList를 가장 많이 사용한다. 사용법은 mutable대신 Array를 붙이고 <>이거 안에 들어갈 자료의 자료형을 넣은 뒤 값들을 괄호안에 적으면 된다.
- 바꾸는 방법은 mutable과 동일하다.
Map
var variable = mapOf("키1" to "값1", "키2" to "값2", "키3" to "값3")
println(variable["키2"])
- 맵의 기본형태 이다.
- 키1을 만약 score로 두고 키2를 age 등 이렇게 둘 수 있고 값에 각각 스코어와 나이에 해당하는 값을 집어 넣으면 밑에 보이는 변수[키] 로 접근 할 수 있다.
- 다만 그냥 mapOf는 읽기전용이라 수정이 불가능하다.
var variable = mutableMapOf("키1" to 값1, "키2" to 값2)
variable["키3"] = 값3
println(variable["키3"])
- 리스트와 마찬가지로 수정 가능한 형태는 mutable이 앞에 붙는다.
- 위와 같은 식은 키1,2만 들어가 있던 식에 키3을 더해주는 키이다. 그래서 결과로 키3을 부르면 값3이 나오게된다.
var variable = mutableMapOf("키1" to 값1, "키2" to 값2, "키3" to 값3)
for((k,v) in variable) {
println("${k}의 값은 ${v}입니다.)
}
- 키1 과 값1, 키2와 값2, 키3과 값3을 차곡차곡 나타내려면 for문을 넣고 안에 (k,v)로 대충 인덱스와 값을 표현하는 문자를 넣어주면 위에 값은 다음과 같다.
키1의 값은 값1입니다.
키2의 값은 값2입니다.
키3의 값은 값3입니다.
Set
- 셋은 중복없이 데이터를 관리하는 집합 자료형이다. 수학에서의 합집합, 차집합, 교집합 등을 여기서 표현 할 수 있다.
- 위에 리스트나 맵은 컬렉션들의 요소를 찾는데 집중하지만, 셋은 요소가 존재하는지에 집중한다.
var variable = setOf("요소1", "요소2", "요소3")
- 읽기 전용 set으로 수정이 불가능하다.
var variable = mutableSetOf("요소1", "요소2", "요소3")
variable.add("요소4")
variable.remove("요소4")
println("집합의 크기는 ${variable.size} 입니다.")
- 수정 가능한 set은 다른 컬렉션들과 마찬가지로 mutable을 붙이면 된다. 그리고 요소를 추가하거나 제거 할 때는 .add("요소") 로 추가하거나 .remove(요소) 로 제거할 수 있다.
- 그리고 결과값에 저렇게 .size를 붙이면 크기를 알 수 있는데 위에서는 요소4를 더했다가 바로 뺐고 그 뒤에 크기를 나타내었으므로 결국 요소1~3인 3이 정답이다.
var variable = mutableSetOf("요소1", "요소2", "요소3")
var findVariable = readLine()!!
if (variable.contains(findVariable)) {
println("${findVariable} 종류는 존재합니다.")
} else {
println("${findVariable}는 존재하지 않습니다.")
}
- set에서는 contains 라는 메소드로 존재하는지 찾을 수 있다. 그래서 우선 null이 발생하지 않게 !! 두개로 선언하고 만약 요소4를 쳤다고 치면 결과값은 "요소4는 존재하지 않습니다" 가 뜬다. 반대로 요소1~3을 넣게 되면 존재한다고 뜨게 된다. 이 set에서는 contains 라는걸 기억해둬야겠다.
// 귀여운 새의 집합
var variable = setOf("닭", "참새", "비둘기", "물오리")
// 날수있는 새의 집합
var variable2 = setOf("참새", "비둘기", "까치")
// 모든 새의 집합 (합집합)
var unionVariable = variable.union(variable2)
// 귀엽고 날수있는 새의 집합 (교집합)
var intersectVariable = variable.intersect(variable2)
// 귀여운 새들중에서 날수없는 새의 조합 (차집합)
var subtractVariable = variable.subtract(variable2)
println("=====합집합=====")
println("모든 새의 집합 : ${unionVariable}")
//닭,참새,비둘기,물오리,까치
println("=====교집합=====")
println("귀엽고 날수있는 새의 집합 : ${intersectVariable}")
//참새,비둘기
println("=====차집합=====")
println("귀엽고 날수없는 새의 집합 : ${subtractVariable}")
//닭,물오리
- set은 교집합, 차집합, 합집합으로 간편하게 요소들을 추출할 수 있다.
- 우선 합집합은 변수.union(변수2) 로 식을 만든다. 교집합은 합집합의 union자리에 intersect 를, 차집합은 subtract 를 넣으면 된다.
자주 보이던 map과 list에 대해 정리 해보았다.
나중에 까먹지 않고 쓸 수 있으면 좋긴 하겠는데...일단 정리해 두고 모르겠으면 다시 열어봐야겠다.
'내일배움캠프' 카테고리의 다른 글
본 캠프 18일차 - let,filter,fold (0) | 2023.12.13 |
---|---|
본 캠프 17일차 - 지난 과제 (0) | 2023.12.12 |
본 캠프 15일차 -쓰레드 (1) | 2023.12.08 |
본 캠프 14일차 (1) | 2023.12.07 |
본 캠프 13일차 (1) | 2023.12.06 |