Kotlin SortedMap Interface

Introduction

In Kotlin, the SortedMap interface represents a map that maintains its entries in ascending order according to the natural ordering of its keys, or by a comparator provided at map creation time. SortedMap is part of the kotlin.collections package and is used for storing and managing data with efficient access and retrieval operations while maintaining sorted order.

Table of Contents

  1. What is SortedMap?
  2. Creating a SortedMap
  3. Common Operations
  4. Examples of SortedMap
  5. Real-World Use Case
  6. Conclusion

1. What is SortedMap?

The SortedMap interface in Kotlin is a generic interface that represents a map whose entries are sorted by keys. It extends the Map interface and adds functions for working with sorted maps.

Syntax

interface SortedMap<K, out V> : Map<K, V>

2. Creating a SortedMap

You can create a SortedMap using the sortedMapOf function or by using a custom comparator.

Example

val sortedMap = sortedMapOf(3 to "three", 1 to "one", 2 to "two") // Creates a SortedMap with elements sorted by key

3. Common Operations

SortedMap supports various operations for accessing, adding, and removing key-value pairs while maintaining sorted order.

Accessing Elements

  • get(key: K): Returns the value associated with the specified key, or null if the key is not found.
  • keys: Returns a set of all keys in the map, in sorted order.
  • values: Returns a collection of all values in the map, in the order corresponding to the sorted keys.
  • entries: Returns a set of all key-value pairs in the map, in sorted order.

Checking Properties

  • size: Returns the number of key-value pairs in the map.
  • isEmpty(): Checks if the map is empty.
  • containsKey(key: K): Checks if the map contains the specified key.
  • containsValue(value: V): Checks if the map contains the specified value.

Adding and Removing Elements (SortedMap)

  • put(key: K, value: V): Adds a key-value pair to the map. If the key already exists, it updates the value.
  • remove(key: K): Removes the key-value pair associated with the specified key.
  • clear(): Removes all key-value pairs from the map.

Navigating the Map

  • firstKey(): Returns the first (lowest) key currently in this map.
  • lastKey(): Returns the last (highest) key currently in this map.
  • headMap(toKey: K): Returns a view of the portion of this map whose keys are strictly less than toKey.
  • tailMap(fromKey: K): Returns a view of the portion of this map whose keys are greater than or equal to fromKey.
  • subMap(fromKey: K, toKey: K): Returns a view of the portion of this map whose keys range from fromKey, inclusive, to toKey, exclusive.

4. Examples of SortedMap

Example 1: Basic Usage of SortedMap

This example demonstrates how to create and use a basic SortedMap.

fun main() {
    val sortedMap = sortedMapOf(3 to "three", 1 to "one", 2 to "two")
    println("SortedMap: $sortedMap") // Output: SortedMap: {1=one, 2=two, 3=three}
    println("Value for key 1: ${sortedMap[1]}") // Output: Value for key 1: one
}

Output:

SortedMap: {1=one, 2=two, 3=three}
Value for key 1: one

Explanation:
This example creates a sorted map of integers to strings and accesses a value using a key.

Example 2: Accessing Keys, Values, and Entries

This example demonstrates how to access keys, values, and entries of the sorted map.

fun main() {
    val sortedMap = sortedMapOf(3 to "three", 1 to "one", 2 to "two")
    println("Keys: ${sortedMap.keys}") // Output: Keys: [1, 2, 3]
    println("Values: ${sortedMap.values}") // Output: Values: [one, two, three]
    println("Entries: ${sortedMap.entries}") // Output: Entries: [1=one, 2=two, 3=three]
}

Output:

Keys: [1, 2, 3]
Values: [one, two, three]
Entries: [1=one, 2=two, 3=three]

Explanation:
This example shows how to access the keys, values, and entries of a sorted map.

Example 3: Checking Properties

This example demonstrates how to check the properties of a sorted map.

fun main() {
    val sortedMap = sortedMapOf(3 to "three", 1 to "one", 2 to "two")
    println("Size of map: ${sortedMap.size}") // Output: Size of map: 3
    println("Map is empty: ${sortedMap.isEmpty()}") // Output: Map is empty: false
    println("Map contains key 2: ${sortedMap.containsKey(2)}") // Output: Map contains key 2: true
    println("Map contains value 'three': ${sortedMap.containsValue("three")}") // Output: Map contains value 'three': true
}

Output:

Size of map: 3
Map is empty: false
Map contains key 2: true
Map contains value 'three': true

Explanation:
This example checks the size, whether the map is empty, and whether it contains specific keys and values.

Example 4: Navigating the SortedMap

firstKey(), lastKey(), headMap(toKey: K), tailMap(fromKey: K), and subMap(fromKey: K, toKey: K)

This example demonstrates how to navigate the sorted map.

fun main() {
    val sortedMap = sortedMapOf(3 to "three", 1 to "one", 2 to "two", 5 to "five", 4 to "four")

    println("First key: ${sortedMap.firstKey()}") // Output: First key: 1
    println("Last key: ${sortedMap.lastKey()}") // Output: Last key: 5

    val headMap = sortedMap.headMap(3)
    println("Head map: $headMap") // Output: Head map: {1=one, 2=two}

    val tailMap = sortedMap.tailMap(3)
    println("Tail map: $tailMap") // Output: Tail map: {3=three, 4=four, 5=five}

    val subMap = sortedMap.subMap(2, 5)
    println("Sub map: $subMap") // Output: Sub map: {2=two, 3=three, 4=four}
}

Output:

First key: 1
Last key: 5
Head map: {1=one, 2=two}
Tail map: {3=three, 4=four, 5=five}
Sub map: {2=two, 3=three, 4=four}

Explanation:
This example demonstrates how to navigate a sorted map using firstKey(), lastKey(), headMap(), tailMap(), and subMap().

Example 5: Adding and Removing Elements in a SortedMap

This example demonstrates how to add and remove elements in a SortedMap.

fun main() {
    val sortedMap = sortedMapOf(1 to "one", 3 to "three")
    sortedMap[2] = "two" // Adding an element
    sortedMap.remove(3) // Removing an element
    println("SortedMap after modifications: $sortedMap") // Output: SortedMap after modifications: {1=one, 2=two}
}

Output:

SortedMap after modifications: {1=one, 2=two}

Explanation:
This example shows how to add and remove elements from a SortedMap.

5. Real-World Use Case: Managing Sorted Student Scores

You can use SortedMap to manage student scores in a sorted manner.

Example: Managing Student Scores

fun main() {
    val studentScores = sortedMapOf(101 to "Amit", 103 to "Bhavesh", 102 to "Chitra")
    println("Initial student scores: $studentScores") // Output: Initial student scores: {101=Amit, 102=Chitra, 103=Bhavesh}

    studentScores[104] = "Divya"
    println("After adding Divya: $studentScores") // Output: After adding Divya: {101=Amit, 102=Chitra, 103=Bhavesh, 104=Divya}

    studentScores.remove(101)
    println("After removing Amit: $studentScores")

 // Output: After removing Amit: {102=Chitra, 103=Bhavesh, 104=Divya}
}

Output:

Initial student scores: {101=Amit, 102=Chitra, 103=Bhavesh}
After adding Divya: {101=Amit, 102=Chitra, 103=Bhavesh, 104=Divya}
After removing Amit: {102=Chitra, 103=Bhavesh, 104=Divya}

Explanation:
This example uses SortedMap to manage student scores by adding, removing, and maintaining a sorted order.

Conclusion

The SortedMap interface in Kotlin is a powerful and flexible way to manage sorted collections of key-value pairs. It is part of the kotlin.collections package and provides essential operations for accessing, querying, and modifying elements while maintaining sorted order. Understanding and utilizing the SortedMap interface can greatly enhance your ability to work with sorted collections in Kotlin.

Comments

Spring Boot 3 Paid Course Published for Free
on my Java Guides YouTube Channel

Subscribe to my YouTube Channel (165K+ subscribers):
Java Guides Channel

Top 10 My Udemy Courses with Huge Discount:
Udemy Courses - Ramesh Fadatare