Kotlin/Kotlin 자료구조

    [Kotlin] Set, MutableSet 은 어떻게 원소에 빠르게 접근할 수 있을까? : Set이 평균적 O(1)의 속도로 원소에 접근하는 방법

    Set, MutableSet 은 어떻게 원소에 빠르게 접근할 수 있을까? Kotlin의 Set은 원소에 접근하는데 걸리는 시간이 평균적으로 O(1)이고 중복을 체크하는데 걸리는 시간도 O(1)이다. 이 때문에 많은 Set을 사용하면 매우 효율적으로 원소에 접근할 수 있다. 이번 글에서는 그 이유를 알아보고자 한다. Kotlin의 Set, MutableSet에서 사용하는 자료 구조 Kotlin의 Set, MutableSet은 모두 인스턴스를 만들기 위해 LinkedHashSet을 사용한다. Set의 내부 구현 살펴보기 Set의 모든 생성자를 보는데는 너무 시간이 많이 걸리므로 Set을 만드는 대표적인 함수인 setOf 함수만 보도록 하자. Kotlin에서 setOf를 사용해 Set 생성하는 부분을 보면 ..

    [Kotlin] Kotlin의 LinkedList 내부 구현 알아보고 사용법 한 번에 정리하기

    Kotlin의 LinkedList 알아보기 Kotlin은 Java의 LinkedList를 사용하며 다음의 특징을 가진다. 1. 첫 노드와 마지막 노드에 대한 포인터를 가지고 있다. /** * Pointer to first node. */ transient Node first; /** * Pointer to last node. */ transient Node last; 2. 크기에 대한 정보를 가지고 있어서 크기에 접근하기 위한 시간 복잡도가 O(1)이다. transient int size = 0; 3. Node는 이전 노드와 다음 노드에 대한 참조를 모두 가진다. private static class Node { E item; Node next; Node prev; Node(Node prev, E ele..

    LinkedList란 무엇인가? 단일 연결 리스트, 양방향 연결 리스트 간단하게 구현해보기

    LinkedList란 무엇인가? LinkedList는 각 노드에서 단방향으로 포인터를 가진 단일 연결 리스트(Singly Linked List)와 양방향으로 포인터를 가진 양방향 연결 리스트(Doubly Linked List)로 나뉜다. 단일 연결 리스트 단일 연결 리스트(Singly Linked List)는 각 노드에서 다음 노드에 대한 참조를 가지고 있어 다음 노드로 이동할 수는 있지만 이전 노드로 이동할 수는 없는 리스트이다. 이 때문에 이전 노드와 다음 노드의 참조를 모두 가지는 Double Linked List에 비해 메모리 공간을 약간 덜 차지하는 장점이 있으며, 특정 노드 삭제를 위해 삭제할 노드의 이전 노드의 포인터를 다음 노드로 변경하면 되기 때문에 삭제가 매우 간단하다. 하지만 여러 단..

    Kotlin, Java가 String의 인코딩 방식으로 유니코드 UTF-16을 선택한 이유와 장점

    Kotlin과 Java의 Char 저장 방식 Kotlin과 Java는 UTF-16으로 인코딩 되어 저장된다. 아래는 Kotlin Char 클래스의 주석이다. 아래 주석에서 보면 Char은 16-bit 유니코드 문자를 표현한다고 되어 있다. /** * Represents a 16-bit Unicode character. * * On the JVM, non-nullable values of this type are represented as values of the primitive type `char`. */ public class Char private constructor() : Comparable { Kotlin과 Java는 왜 UTF-16을 문자열 인코딩 방식으로 택했을까? 바로 JVM이 내부적으로..

    [Kotlin] CharArray 사용 방법과 내부 구성 한 번에 정리하기 : CharArray 생성 방식, String과의 관계와 인코딩 방식

    CharArray란? CharArray는 원시 타입 Char으로 이루어진 배열을 나타낸다. /** * ... * On the JVM, non-nullable values of this type are represented as values of the primitive type `char`. */ public class Char private constructor() : Comparable Char 클래스의 주석에 따르면 Kotlin은 non-nullable한 Char을 JVM상에서 Java의 원시 타입인 char과 똑같이 저장한다. 이러한 non-nullable한 Char 값들의 집합을 원시 타입을 유지하면서 배열로 만든 것이 바로 CharArray이다. CharArray는 언뜻 보면 Array과 비..