Lesson 3
Understanding Lists in Kotlin: Creation, Access, and Properties
Topic Overview and Actualization

Hello, coding rookie! Today, we're venturing into Kotlin's vast terrain to unravel a fundamental feature: Lists! Much like a grocery list or a to-do list, Kotlin allows us to create a list of items. With our focus set on understanding Lists, we're prepared for an adventure into the land of Kotlin!

Introduction to Lists in Kotlin

Have you ever created a to-do list? It organizes and stores your tasks, doesn't it? Kotlin provides the same functionality with Lists! Kotlin's Lists can store multiple items (of either similar or various types) similar to this to-do list:

Kotlin
1 val myToDoList = listOf("buy groceries", "take out the trash", "send emails")

Depending on the requirements, Lists can be mutable (modifiable using mutableListOf()) or immutable (non-modifiable with listOf()).

Creating Lists in Kotlin

To create a list in Kotlin, we require the listOf() (for an immutable list) or the mutableListOf() (for a mutable list) function. Let's see how:

Kotlin
1val names = listOf("Alice", "Bob", "Charlie") // An immutable list 2names.add("Dave") // This will cause an error because list is immutable 3 4val mutableNames = mutableListOf("Alice", "Bob", "Charlie") // A mutable list 5mutableNames.add("Dave") // Adding an element to the mutable list

In this context, add() is a method that allows us to add more elements to a mutable list.

Accessing List Elements

Accessing elements in a list is achieved using numeric indices. Remember, list indexing starts at 0:

Kotlin
1val fruits = listOf("Apple", "Banana", "Cherry") 2println(fruits[0]) // Accessing the first element, "Apple" 3println(fruits[2]) // Accessing the third element, "Cherry"

Exercise caution! Attempting to access an index not present in the list will throw an IndexOutOfBoundsException.

Properties of Lists

Kotlin Lists come with useful properties. The size signifies the count of items, first and last refer to the first and last elements respectively, and indexOf fetches the index of a specified element:

Kotlin
1val numbers = listOf(1, 2, 3, 4, 5) 2println(numbers.size) // Size of the list, prints 5 3 4val colors = listOf("Red", "Green", "Blue") 5println(colors.first()) // First element, prints "Red" 6println(colors.last()) // Last element, prints "Blue" 7 8val planets = listOf("Mercury", "Venus", "Earth") 9println(planets.indexOf("Venus")) // Index of "Venus", prints 1

These properties empower our coding arsenal!

Multidimensional Lists in Kotlin

Multidimensional lists extend the concept of arrays to multiple dimensions, like a grid. They're simply lists of lists. Here's how you can work with them, including with mutable lists for flexibility:

Kotlin
1// Immutable multidimensional list 2val grid = listOf( 3 listOf(1, 2, 3), 4 listOf(4, 5, 6) 5) 6 7// Mutable multidimensional list 8val mutableGrid = mutableListOf( 9 mutableListOf(1, 2, 3), 10 mutableListOf(4, 5, 6) 11) 12mutableGrid[0][1] = 20 // Changing the second element of the first row 13 14println(grid[0][2]) // Access: 3 15println(mutableGrid[0][1]) // Access: 20

This approach allows for complex data structures, such as matrices, to be easily manipulated and accessed.

Lists vs. Arrays in Kotlin

Kotlin offers arrays (arrayOf()) and lists to store elements, each suited for different needs. Arrays are fixed in size; once created, you can't add or remove elements, making them perfect for when the number of elements is known and constant.

Immutable lists (listOf()) can't be modified after creation, similar to arrays. However, they're part of Kotlin's Collections API and come with capabilities that we'll explore later, offering more versatility despite their fixed size.

Mutable lists (mutableListOf()) allow for flexibility—elements can be added or removed, catering to scenarios where your data might change over time.

Kotlin
1val namesArray = arrayOf("Alice", "Bob", "Charlie") 2val namesList = listOf("Alice", "Bob", "Charlie") // More capabilities to be discussed later 3val mutableNamesList = mutableListOf("Alice", "Bob", "Charlie") 4mutableNamesList.add("Dave") 5println(mutableNamesList) // Prints: [Alice, Bob, Charlie, Dave]

While arrays and immutable lists are great for stable data, mutable lists provide the adaptability needed for dynamic data sets. We'll dive into the unique features of lists, like data manipulation, in upcoming lessons.

Quick Lesson Summary and Upcoming Practice

Bravo! You've unravelled Lists in Kotlin today, discovering their essence, learning how to create them, manipulate them, and understanding their properties. Next up, we have crucial practice sessions! Remember, practice forms the cornerstone of programming prowess! Grab the coding helm, and let's steer into the exciting world of Kotlin!

Enjoy this lesson? Now it's time to practice with Cosmo!
Practice is how you turn knowledge into actual skills.