Android Kotlin: How to create and use a HashMap

This code demonstrates how to work with HashMaps in an Android application written with Kotlin. HashMaps are a fundamental data structure used to store collections of key-value pairs. The code showcases three types of HashMaps: MutableHashMap, HashMap, and LinkedHashMap. Each type offers slight variations in behavior.

The code provides a clear separation between the UI layout (defined in activity_main.xml) and the logic behind the button clicks (implemented in MainActivity.kt). When a button is clicked, it triggers specific functionalities related to the chosen HashMap type. The functionalities include adding key-value pairs, iterating through the map, removing entries, updating values, and checking for emptiness. The results are displayed on the TextView element.

Summary

This code provides a valuable learning resource for Android developers working with Kotlin. It offers a practical example of using different HashMap types, demonstrating their functionalities and potential use cases within an Android application. By understanding these functionalities, developers can effectively store and manage key-value pairs within their apps.


MainActivity.kt

package com.cfsuman.kotlintutorials

import android.os.Bundle
import android.text.method.ScrollingMovementMethod
import android.widget.Button
import android.widget.TextView
import androidx.appcompat.app.AppCompatActivity


class MainActivity : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        // get the widgets reference from XML layout
        val textView = findViewById<TextView>(R.id.textView)
        val btnMutableHashMap = findViewById<Button>(
            R.id.btnMutableHashMap)
        val btnHashMap = findViewById<Button>(R.id.btnHashMap)
        val btnLinkedHashMap = findViewById<Button>(
            R.id.btnLinkedHashMap)


        // make textview content scrollable
        textView.movementMethod = ScrollingMovementMethod()


        // Mutable hash map example
        btnMutableHashMap.setOnClickListener{
            val builder = StringBuilder()

            // Initialize a new empty mutable hash map
            val colors = mutableMapOf<String,String>()
            // Put some key value pairs to hash map
            colors["INDIANRED"] = "#CD5C5C"
            colors["CRIMSON"] = "#DC143C"
            colors["SALMON"] = "#FA8072"
            colors["LIGHTCORAL"] = "#F08080"

            builder.append("Loop through the mutable hash map")
            colors.forEach{ (key, value) ->
                builder.append("\n$key,$value")
            }

            colors.remove("CRIMSON")
            builder.append("\n\n After remove an item")
            for ((key,value) in colors){
                builder.append("\n$key:$value")
            }


            // Replace/update a value
            colors["SALMON"] = "NEW VALUE"
            builder.append("\n\n After updating a value")
            colors.forEach{ (key, value) ->
                builder.append("\n$key,$value")
            }

            // Check whether hash map is empty
            builder.append("\n\nHashMap is empty? " +
                    ": ${colors.isEmpty()}")

            // Get value by key from hash map
            val value = colors["LIGHTCORAL"]
            builder.append("\n\nLIGHTCORAL value $value")

            // Initialize a new hash map with key and value pairs
            val reds = mutableMapOf("RED" to "#FF0000",
                "FIREBRICK" to "#B22222", "CRIMSON" to "#DC143C")

            // Loop through the map
            builder.append("\n\nLoop through the new mutable hash map")
            reds.forEach{ (key, value) ->
                builder.append("\n$key : $value")
            }

            textView.text = builder.toString()
        }



        // Immutable hash map example
        btnHashMap.setOnClickListener{
            val builder = StringBuilder()

            // Initialize a new hash map with keys and values
            val colors = mapOf(
                "GOLD" to "#FFD700",
                "YELLOW" to "#FFFF00",
                "ALICEBLUE" to "#F0F8FF",
                "BISQUE" to "#FFE4C4"
            )

            builder.append("Loop through the map\n")
            // Loop through the map
            colors.forEach{ (key, value) ->
                builder.append("\n$key : $value")
            }

            // Map keys to list
            val keys:List<String> = colors.keys.toList()

            // Map values to list
            val values:List<String> = colors.values.toList()


            // Loop through the map keys list
            builder.append("\n\nHashMap keys list\n")
            keys.forEach{
                builder.append("$it,")
            }

            // Loop through the map values list
            builder.append("\n\nHashMap values list\n")
            values.forEach{
                builder.append("$it,")
            }

            textView.text = builder.toString()
        }



        // Linked hash map example
        btnLinkedHashMap.setOnClickListener{
            val builder = StringBuilder()

            val colors = linkedMapOf<String,String>()
            colors["TEAL"] = "#008080"
            colors["AQUA"] = "#00FFFF"
            colors["LIGHTCYAN"] = "#E0FFFF"
            colors["BLUE"] = "#0000FF"
            colors["ROSYBROWN"] = "#BC8F8F"

            builder.append("Loop through the linked hash map\n")
            // Loop through the linked hash map
            colors.forEach{ (key, value) ->
                builder.append("\n$key : $value")
            }

            textView.text = builder.toString()
        }
    }
}
activity_main.xml

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="#F8F8F8"
    android:padding="8dp">

    <Button
        android:id="@+id/btnMutableHashMap"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Mutable HashMap"
        android:textAllCaps="false"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent" />

    <Button
        android:id="@+id/btnHashMap"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginStart="8dp"
        android:text="HashMap"
        android:textAllCaps="false"
        app:layout_constraintBottom_toBottomOf="@+id/btnMutableHashMap"
        app:layout_constraintStart_toEndOf="@+id/btnMutableHashMap" />

    <Button
        android:id="@+id/btnLinkedHashMap"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginStart="8dp"
        android:text="Linked HM"
        android:textAllCaps="false"
        app:layout_constraintBottom_toBottomOf="@+id/btnHashMap"
        app:layout_constraintStart_toEndOf="@+id/btnHashMap" />

    <TextView
        android:id="@+id/textView"
        android:layout_width="0dp"
        android:layout_height="0dp"
        android:layout_marginTop="8dp"
        android:fontFamily="sans-serif"
        android:textSize="18sp"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/btnMutableHashMap" />

</androidx.constraintlayout.widget.ConstraintLayout>