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.
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()
}
}
}
<?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>