Kotlin - Collection(List, Set, Map)

이동수·2024년 10월 7일

Kotlin

목록 보기
30/33
post-thumbnail

Collection

정의

자료구조를 정의하고 알고리즘을 동작하기 위한 클래스 라이브러리 및 함수형 라이브러리들의 모임 -> 배열도 일종의 컬렉션

특징

  • 객체들의 모임(Collections)을 관리하기 위한 목적
  • 그전 자바 Package(java.util.*)를 그대로 사용가능
    • java.util* : JCF
  • 각 Collection별로 다양한 제어(CRUD)함수가 존재
  • kotlin 컬렉션에는 Collection Lambda Functions 을 제공
  • 가변 Collection 객체는 자유로운 CRUD 가능
    • 불변 Collection 객체는 add, remove, update 등의 함수를 사용하지 못함

collection - list, set, map
list - 여러데이터를 원하는 순서로 넣어 관리
set - 순서상관없이
map - 순서없는 키-값의 데이터 집합(키 중복 불가)
Mutable붙이면 - 추가,삭제,변경 가능

1. List

사용하는 곳

  • ArrayList (저절로 증가하는 배열), arrayListOf(), mutableListOf()
    • 빠른 인덱스 접근
  • LinkedList (추가, 삭제 많을때 사용)
    • 빠른 추가/삭제
    • 단점 : 메모리 공간을 효육적으로 못씀

특징

  • index를 사용할 수 있다 (index O)
  • 중복 허용함 (중복 O)
    • 중복은 equals, hashCode가 같을때 중복이라고 함

사용법

  • listOf()
fun main(){
    val a = listOf("가","나","다")
    println(a)      //[가,나,다]

    for(i in a){
        print("$i") //가나다
    }
    println()

    val b = mutableListOf(6,3,1)
    println(b) //[6, 3, 1]

    b.add(4)
    println(b) //[6, 3, 1, 4]

    b.add(2, 8) //[2]에 8추가 나머지는 뒤로밀림
    println(b) //[6, 3, 8, 1, 4]

    b.removeAt(1) //[1]삭제
    println(b)  //[6, 8, 1, 4]

    b.shuffle()
    println(b)

    b.sort()    //오름차순정렬
    println(b)  //[1, 4, 6, 8]

    b.reverse() //뒤집기
    println(b)  //[8, 6, 4, 1]

}

2. Set

사용하는 곳

  • 순서 없고 정렬해서 표현할때
  • 중복 허용 안할때
  • HashSet
    • 순서 보장 안됨
    • 빠른 접근 속도 (키값을 이용해 매우 빠르게 검색가능 O(1)시간복잡도)
    • key, value 모두 null허용임
  • TreeSet
    • 요소들이 정렬된 순서로 유지됨
    • 느린 접근 속도
      • 이진 트리 구조를 사용하여 요소를 저장하므로, 추가, 삭제, 탐색 속도가 O(log n)이다.
    • value만 null 허용
  • SortedSet

특징

  • index 사용못함 (index X)
  • 중복 허용 안함 (중복 X)
  • 순서x정렬

사용법

3. Map

사용하는 곳

  • HashMap
    • 키는 중복될 수 없으며, 값은 중복될 수있다.
      • 1번 : 2, 2번 : 2
    • 순서없음
  • LinkedHashMap
    • 키-값 쌍을 저장하지만, 입력순서를 유지함.

특징

  • key, value
  • 객체 위치가 아닌 고유한 key를 통해 객체를 참조
  • 같은 key에 다른객체를 넣으면 기존의 객체가 대체됨

사용법

  • put(키,값)추가
  • remove(키)삭제
  • print(a[키]) 해서 값 출력가능
  • (key to value, key to value)형태로 저장

HashSet과 TreeSet 예제

HashSet

ex 1)

override fun equals(other: Any?): Boolean {
        return when(other){
            is Person -> serialNumber == other.serialNumber
            else -> false
        }
    }
    override fun hashCode(): Int {
        return serialNumber.hashCode()
    }

val persons = HashSet<Person>()
    //val persons = ArrayList<Person>()
    with(persons){
        add(Person("표인수","123456",37))
        add(Person("이동수","123456",15))
        add(Person("소진호","123456",21))
        add(Person("표인수","123456",37))
        add(Person("소진호","123456",21))
    }
//출력 - {표인수, 123456, 37}

ex 2)

override fun equals(other: Any?): Boolean {
        return when(other){
            is Person -> serialNumber == other.serialNumber
            else -> false
        }
    }
    override fun hashCode(): Int {
        return age.hashCode() //변경지점!!!!!!!
    }

val persons = HashSet<Person>()
    //val persons = ArrayList<Person>()
    with(persons){
        add(Person("표인수","123456",37))
        add(Person("이동수","123456",15))
        add(Person("소진호","123456",21))
        add(Person("표인수","123456",37))
        add(Person("소진호","123456",21))
    }
/*출력
{표인수, 123456, 37}
{소진호, 123456, 21}
{이동수, 123456, 15}
*/

0개의 댓글