멜팅비의 개발 공부

[Android-Kotlin] 코틀린 Collection 함수 본문

개발 공부/[Android 개발]

[Android-Kotlin] 코틀린 Collection 함수

멜팅비 2021. 4. 3. 12:10
반응형

코틀린 Collection 함수 스터디 내용 정리


List

데이터가 저장하거나 삭제될 때 순서를 지키는 Collection
Mutable(변할 수 있는)과 Immutable(불변의)을 모두 지원

Immutable List = 수정할 수 없는 List

get(조회)만 가능

val fruits = listOf("apple", "banana", "kiwi", "peach")

fruits.get(2) // 실행결과 > kiwi
fruits[1] // 실행결과 > bananan
fruits.size // 실행결과 > 4
fruits.indexOf("peach") // 실행결과 > 3

 

Mutable List = 수정할 수 있는 List

add /addALL / remove / removeAt 등 추가, 삭제가 가능

val fruits = mutableListOf<String>("apple", "banana", "kiwi", "peach")

fruits.remove("apple")
// 실행결과 > [banana, kiwi, peach]

fruits.add("grape")
// 실행결과 > [banana, kiwi, peach, grape]

fruits.addAll(listOf("melon", "cherry")
// 실행결과 > [banana, kiwi, peach, grape, melon, cherry]

fruits.removeAt(2)
// 실행결과 > [banana, kiwi, grape, melon, cherry]
  • add / addAll
    • add(item) : 리스트 맨 끝에 item을 추가
    • add(index, item) : index에 item을 추가
    • addAll(list) : 파라미터에 있는 list의 항목들을 가져와 추가
    • addAll(index, list) : index자리에 파라미터에 있는 list의 항목들을 가져와 추가
val fruits = mutableListOf<String>("apple", "banana", "kiwi", "peach")

// add
fruits.add("grape")
fruits.add(3, "orange")

// addAll
fruits.addAll(listOf("melon", "cherry")
fruits.addAll(3, listOf("melon", "cherry")
  • clear : MutableList의 모든 요소 삭제
val fruits = mutableListOf<String>("apple", "banana", "kiwi", "peach")

fruits.clear()
  • iterator : Collection 개념에 속하는 자료구조들의 원소들을 순회할 때 공통적으로 사용
val iterator = fruits.iterator()
// Iterator 생성 후 첫 번째 원소를 가리킴
// next()함수 호출 시 가리키고 있는 원소의 값을 return 후 다음 원소를 가리킴
// hasNext() Iterator가 가리킬 다음 원소가 존재하는지 여부 체크

while (iterator.hasNext()) {
		print(iterator.next())
}
  • listIterator : List형에서만 사용 가능, 양쪽 순회가 가능한 양방향 Iterator
    • hasPrevious() : 이전 원소가 존재하는 확인
    • previous() : 가리키고 있는 원소의 값을 return 후 이전 원소를 가리킴
    • nextIndex() / previousIndex() : index 확인 가능
val listIterator = fruits.listIterator(2) 
// listIterator(index) : iterator 생성 시 index부터 가리키도록

while (listIterator.hasNext()) {
	print(listIterator.next())
}

while (listIterator.hasPrevious()) {
	print(listIterator.previous())
}
  • remove : 배열에 해당 요소 값을 찾아 삭제 (요소가 있을 경우 true 반환 / 없을 경우 false 반환)
  • removeAll : Collection을 인자로 받으며 Collection 요소 중 하나라도 일치하는 값이 있으면 삭제하고 true 반환 / 없을 경우 false 반환
  • removeAt : List의 index에 있는 요소를 삭제하고 빈 공간도 삭제
val fruits = mutableListOf<String>("apple", "banana", "kiwi", "peach")
fruits.remove("apple") 
// [banana, kiwi, peach] 

fruits.removeAll(listOf("banana", "orange", "melon") 
// [kiwi, peach]

val fruits = mutableListOf<String>("apple", "banana", "kiwi", "peach")
fruits.removeAt(0) 
// [banana, kiwi, peach] 
  • retainAll : 두 개의 Collection에서 공통된 요소를 제외한 나머지 삭제
val fruits = mutableListOf<String>("apple", "banana", "kiwi", "peach")
val fruits2 = mutableListOf<String>("apple", "orange", "kiwi", "grape")

fruits.retainAll(fruits2) // [apple, kiwi]
  • set(index, value) : index 값을 value로 바꾸고 바뀐 요소를 return
val fruits = mutableListOf<String>("apple", "banana", "kiwi", "peach")

fruits.set(1, "orange") // [apple, orange, kiwi, peach]
fruits[1] = "grape" // [apple, grape, kiwi, peach]
  • subList : 원하는 위치를 잘라 Collection을 반환
val fruits = mutableListOf<String>("apple", "banana", "kiwi", "peach")

fruits.subList(1,3) // [banana, kiwi]

 

Set

동일한 아이템이 없는 Collection, 순서가 특별히 정해져 있지 않으며 null 객체를 갖고 있을 수 있음
단, null도 1개만 가능 Immutable/Mutable 지원

Immutable Set = 수정이 불가능한 set

val numSet = setOf<Int>(1, 2, 3, 4, 5, 1) // [1, 2, 3, 4, 5]

numSet.size // 5
numSet.contains(3) // true
numSet.isEmpty() // false

 

Mutable Set = 수정이 가능한 set

val numSet = setOf<Int>(1, 2, 3, 3, 4, 5) // [1, 2, 3, 4, 5]

numSet.add(6) // [1, 2, 3, 4, 5, 6]
numSet.remove(5) // [1, 2, 3, 4, 6]
numSet.removeIf( { it < 3 } ) // [4, 6]

 

Map

key와 value를 짝지어 저장하는 Collection
Map의 key는 유일하기 때문에 동일한 이름의 key는 허용하지 않는다.
Immutable / Mutable 지원

 

Immutable Map 

mapOf<key Type, value Type>()으로 생성
아이템은 Pair 객체로 표현 > Pair(A, B) = A to B

val map1 = mapOf<String, String>("1" to "one", "2" to "two")
val map2 = mapOf(Pair("1", "one"), Pair("2", "two"))

// {1=one, 2=two}

Map의 데이터 일기

val map = mapOf(Pair("1", "apple"), Pair("2", "orange"), Pair("3", "banana"))

map.get("1") // apple
map["1"] // apple
map.values // [apple, orange, banana]
map.keys // [1, 2, 3]

 

Mutable Map

mutableMapOf <key Type, value Type>()으로 생성

  • put() : 객체 추가
  • remove() : 요소 삭제
  • clear() : 전체 요소 삭제
val map = mutableMapOf<String, String>()

map.put("1", "apple")
map.put("2", "banana")
map["3"] = "kiwi"

// {1=apple, 2=banana, 3=kiwi}

map.put("4", "orange")
map.remove("2")
// {1=apple, 3=kiwi, 4=oragne}

map.clear()
// {}
반응형
Comments