Algoritmos e estruturas de dados em Kotlin: guia completo para iniciantes

Treinador Online de Python para Iniciantes

Aprenda Python facilmente sem sobrecarga teórica. Resolva tarefas práticas com verificação automática e escreva código diretamente no navegador.

Start Course

Introdução: por que estudar algoritmos e estruturas de dados em Kotlin?



Kotlin é uma linguagem de programação moderna, concisa e segura, amplamente utilizada para desenvolvimento Android, serviços backend e até aplicações desktop. Mas saber escrever código em Kotlin é apenas metade do sucesso. Para se tornar um desenvolvedor verdadeiramente bom, é preciso entender como funcionam os algoritmos e estruturas de dados.



Por que um iniciante precisa disso? Primeiro, conhecer estruturas básicas (listas, pilhas, filas, tabelas hash) ajuda a escrever código mais eficiente e rápido. Segundo, algoritmos são a base para resolver problemas técnicos em entrevistas. Terceiro, é simplesmente interessante: você começa a ver a lógica e a matemática por trás do código.



Neste artigo, vamos abordar os principais algoritmos e estruturas de dados em Kotlin do zero. Todos os exemplos serão simples, compreensíveis e prontos para execução. Vamos lá!



1. Estruturas de dados básicas em Kotlin



Arrays e listas



Em Kotlin, existem dois tipos principais de coleções: Array (tamanho fixo) e List (dinâmica). Para a maioria das tarefas, é mais conveniente usar List.



fun main() {    // Array de tamanho fixo    val numbersArray = arrayOf(1, 2, 3, 4, 5)    println("Array: ${numbersArray.joinToString()}")

// Lista mutável val mutableList = mutableListOf(10, 20, 30) mutableList.add(40) println("Lista após adicionar: $mutableList")

// Lista imutável val immutableList = listOf(100, 200, 300) println("Lista imutável: $immutableList")}


Pilha (Stack)



A pilha funciona pelo princípio LIFO (Last In, First Out) — o último a entrar é o primeiro a sair. Em Kotlin não há uma classe Stack nativa, mas é fácil implementá-la usando MutableList.



class Stack<T> {    private val elements = mutableListOf<T>()

fun push(item: T) = elements.add(item) fun pop(): T? = if (isEmpty()) null else elements.removeAt(elements.size - 1) fun peek(): T? = elements.lastOrNull() fun isEmpty() = elements.isEmpty() fun size() = elements.size}

fun main() { val stack = Stack<Int>() stack.push(1) stack.push(2) stack.push(3)

println("Elemento do topo: ${stack.peek()}") // 3 println("Removendo: ${stack.pop()}") // 3 println("Agora o topo é: ${stack.peek()}") // 2}


Fila (Queue)



A fila funciona pelo princípio FIFO (First In, First Out) — o primeiro a entrar é o primeiro a sair. Em Kotlin, é conveniente usar LinkedList do Java para isso.



import java.util.LinkedList

class Queue<T> { private val elements = LinkedList<T>()

fun enqueue(item: T) = elements.add(item) fun dequeue(): T? = elements.poll() fun peek(): T? = elements.peek() fun isEmpty() = elements.isEmpty() fun size() = elements.size}

fun main() { val queue = Queue<String>() queue.enqueue("Primeiro") queue.enqueue("Segundo") queue.enqueue("Terceiro")

println("Atendendo: ${queue.dequeue()}") // Primeiro println("Próximo: ${queue.peek()}") // Segundo}


2. Algoritmos de ordenação em Kotlin



Bubble Sort (Ordenação por bolha)



Algoritmo simples, porém lento. Adequado para aprendizado, mas não para projetos reais.



fun bubbleSort(arr: MutableList<Int>) {    val n = arr.size    for (i in 0 until n - 1) {        for (j in 0 until n - i - 1) {            if (arr[j] > arr[j + 1]) {                val temp = arr[j]                arr[j] = arr[j + 1]                arr[j + 1] = temp            }        }    }}

fun main() { val list = mutableListOf(64, 34, 25, 12, 22, 11, 90) bubbleSort(list) println("Ordenado com bubble sort: $list")}


B

Blogs

Book Recommendations