Collection.. 자바에서도 참 많이 쓴다.. 진짜 많이 쓰고 정말 많이 쓴다..
list나 map는 자바 웬만큼 해본 사람이면 안써본 사람이 없을것이다..
코틀린에도 대응되는 컬렉션들이 있다.
list : 순서가 있는 목록을 구성한다. 중복을 허용한다
set : 순서가 없는 집합을 구성한다. 중복을 불허한다.
map : 키-값 쌍을 표현하는 자료구조이다. 값은 중복될 수 있으나 키는 중복될 수 없다.
간단한 예시코드이다.
package collectionEx
fun main() {
val list : Collection<Int> = listOf(10,20,10)
val set : Collection<Int> = setOf(10,20,10)
val map : Map<String, String> = mapOf("Java" to "자바", "Kotlin" to "코틀린")
println(list)
println(set)
println(map)
}
결과값 :
[10, 20, 10]
[10, 20]
{Java=자바, Kotlin=코틀린}
이게 set과 list의 차이다. 같은 값으로 초기화해도 set은 정말 순서가 허용되지 않는 값, 만을 취급하기 때문에 중복이 없고, list는 값과 순서가 함께하기 때문에 중복을 허용한다. 같은 컬렉션 인터페이스를 공유해도 그렇다...
map은 set이나 list와 다르게 독자적인 인터페이스를 사용한다.
그럼 초기화 할때 같은 키를 넣으면 어떻게 될까?
컴파일 오류 자체는 나지 않는데..
뒤의 value로 바뀌어서 초기화 되는 모습을 볼 수 있다.........
list 컬렉션은 네 가지 멤버 함수를 가진다.
get은 [] 연산자를 이용해서 호출 가능하다. 현재 인덱스에 있는 값을 반환한다.
indexOf(value)는 value가 몇 번째 인덱스에 있는지, 가장 먼저 찾는 인덱스를 반환한다. 없다면 -1을 반환한다.
lastIndexOf(value)는 value가 찾아진 마지막 인덱스를 반환한다.
listIterator( or index)는 매개변수에 값을 넣으면 그 인덱스부터 시작하는 ListIterator을 반환한다.
sublist(index, index)는 첫 매개변수부터 시작하는 원소를 추출해 마지막 인덱스 -1까지 반환하는 멤버함수이다.
예시를 보자.
package collectionEx
fun main() {
val list : List<Double> = listOf(20.18, 1.14, 9.15, 1.14)
println(list[0])
println(list.indexOf(1.14))
println(list.lastIndexOf(1.14))
println(list.subList(1,2))
}
결과 :
20.18
1
3
[1.14]
ListIterator은 List를 반복자로 만들어 기본 반복자 멤버함수에 멤버함수를 추가한다.
hasPrevious : 커서 앞에 값이 있는지 반환. 커서가 옮겨지지 않음
hasNext : 커서 뒤에 값이 있는지 확인. 커서가 옮겨지지 않음
previousIndex : 커서 이전의 인덱스 반환 . 커서가 옮겨지지 않음
nextIndex : 커서 뒤의 인덱스 반환. 커서가 옮겨지지 않음
next : 커서 뒤의 값 반환. 커서가 다음으로 옮겨짐
previous : 커서 앞의 값 반환. 커서가 이전으로 옮겨짐
예시를 보자.
package collectionEx
private fun moveToNext(iter : ListIterator<Int>){
print("${iter.hasPrevious()}, ")
print("${iter.hasNext()}, ")
print("${iter.previousIndex()}, ")
print("${iter.nextIndex()}, ")
println("${iter.next()}")
}
fun main() {
val iter : ListIterator<Int> = listOf(10, 20, 10).listIterator()
moveToNext(iter)
moveToNext(iter)
moveToNext(iter)
}
결과값 :
false, true, -1, 0, 10
true, true, 0, 1, 20
true, true, 1, 2, 10
결과로 알 수 있듯 커서는
이렇게 각 값의 사이에 존재하고 있고, next 함수에 의해 앞으로 이동된다.
size : 맵의 갯수 반환
keys : 해당 맵이 가진 key값들 반환
values : 해당 맵이 가진 value값들 반환
entries : 해당 맵이 가진 키-값 쌍 반환
isEmpty : 해당 맵이 비었는지 확인
containsKey : 해당 키가 있는지 확인 boolean 반환
containsValues : 해당 값이 있는지 확인 후 boolean 반환
get : 해당 키가 가진 값 반환
getOrDefault : 첫번째 매개변수와 일치하는 키가 있으면, 그 값을 반환하고 없다면 두번째 매개변수 값 반환
예시를 보자.
package collectionEx
fun main() {
val map : Map<String, String> = mapOf("Java" to "자바", "Kotlin" to "코틀린")
println("size : ${map.size}")
println("keys : ${map.keys}")
println("value : ${map.values}")
println("entries : ${map.entries}")
println("isEmpty : ${map.isEmpty()}")
println("containsKey : ${map.containsKey("python")}")
println("containsValue : ${map.containsValue("자바")}")
println("map : ${map["Kotlin"]}")
println("getOrDefault : ${map.getOrDefault("python", "파이썬")}")
}
결과 :
size : 2
keys : [Java, Kotlin]
value : [자바, 코틀린]
entries : [Java=자바, Kotlin=코틀린]
isEmpty : false
containsKey : false
containsValue : true
map : 코틀린
getOrDefault : 파이썬
'Android > 안드로이드 스터디(Kotlin)' 카테고리의 다른 글
Kotlin] 49. sequence (0) | 2020.12.23 |
---|---|
Kotlin] 48. Mutable Collection (0) | 2020.12.23 |
Kotlin] 46. Iterable 인터페이스 (0) | 2020.12.23 |
Kotlin] 45. ClosedRange (0) | 2020.12.23 |
Kotlin] 44. Comparable (0) | 2020.12.23 |