Kotlin Hashmap
Kotlin HashMap is a collection which contains pairs of object. Kotlin Hash Table based implementation of the MutableMap interface. It stores the data in the form of key and value pair. Map keys are unique and the map holds only one value for each key. It is represented as HashMap<key, value> or HashMap<K, V>. The hash table based implementation of HashMap does not guarantees about the order of specified data of key, value and entries of collections.
Constructors of Kotlin HashMap class –
Kotlin HashMap provides 4 constructors and access modifier of each is public:
- HashMap() : It is the default constructor which constructs an empty HashMap instance.
- HashMap(initialCapacity: Int, loadFactor: Float = 0f) : It is used to construct a HashMap of specified capacity. If initialCapacity and loadFactor isn’t being used then both will get ignored.
- HashMap(initialCapacity: Int) : It is used to construct a HashMap of specified capacity. If initialCapacity isn’t being used then it will get ignored.
- HashMap(original: Map <out K, V> ) : It creates instance of HashMap with same mappings as specified map.
Use of HashMap Functions –
Kotlin program of using functions HashMap(), HashMap(original: Map), Traversing hashmap, HashMap.get() –
java
fun main(args: Array<String>) { //A simple example of HashMap class define // with empty "HashMap of <String, Int>" var hashMap : HashMap<String, Int> = HashMap<String, Int> () //printing the Empty hashMap printHashMap(hashMap) //adding elements to the hashMap using // put() function hashMap.put("IronMan" , 3000 ) hashMap.put("Thor" , 100 ) hashMap.put("SpiderMan" , 1100 ) hashMap.put("NickFury" , 1200 ) hashMap.put("HawkEye" , 1300 ) //printing the non-Empty hashMap printHashMap(hashMap) //using the overloaded print function of //Kotlin language to get the same results println("hashMap : " + hashMap + "\n") //hashMap traversal using a for loop for (key in hashMap.keys){ println("Element at key $key : ${hashMap[key]}") } //creating another hashMap object with // the previous version of hashMap object var secondHashMap : HashMap<String, Int> = HashMap<String, Int> (hashMap) println("\n" + "Second HashMap : ") for (key in secondHashMap.keys){ //using hashMap.get() function to fetch the values println("Element at key $key : ${hashMap.get(key)}") } //this will clear the whole map and make it empty println("hashMap.clear()") hashMap.clear() println("After Clearing : " + hashMap) } //function to print the hashMap fun printHashMap(hashMap : HashMap<String, Int>){ // isEmpty() function to check whether // the hashMap is empty or not if (hashMap.isEmpty()){ println("hashMap is empty") } else { println("hashMap : " + hashMap) } } |
Output :
hashMap is empty : {} hashMap : {Thor=100, HawkEye=1300, NickFury=1200, IronMan=3000, SpiderMan=1100} hashMap : {Thor=100, HawkEye=1300, NickFury=1200, IronMan=3000, SpiderMan=1100} Element at key Thor : 100 Element at key HawkEye : 1300 Element at key NickFury : 1200 Element at key IronMan : 3000 Element at key SpiderMan : 1100 secondHashMap : Element at key Thor : 100 Element at key HawkEye : 1300 Element at key IronMan : 3000 Element at key NickFury : 1200 Element at key SpiderMan : 1100 hashMap.clear() After Clearing : {}
Kotlin program of using HashMap initial capacity, HashMap.size –
java
fun main(args: Array<String>) { //HashMap can also be initialize // with its initial capacity. //The capacity can be changed by // adding and replacing its element. var hashMap : HashMap<String, Int> = HashMap<String, Int> ( 4 ) //adding elements to the hashMap using put() function hashMap.put("IronMan" , 3000 ) hashMap.put("Thor" , 100 ) hashMap.put("SpiderMan" , 1100 ) hashMap.put("NickFury" , 1200 ) for (key in hashMap.keys) { println("Element at key $key : ${hashMap[key]}") } //returns the size of hashMap println("\n" + "hashMap.size : " + hashMap.size ) //adding a new element in the hashMap hashMap["BlackWidow"] = 1000 ; println("hashMap.size : " + hashMap.size + "\n") for (key in hashMap.keys) { println("Element at key $key : ${hashMap[key]}") } } |
Output:
Element at key Thor : 100 Element at key IronMan : 3000 Element at key NickFury : 1200 Element at key SpiderMan : 1100 hashMap.size : 4 hashMap.size : 5 Element at key Thor : 100 Element at key BlackWidow : 1000 Element at key IronMan : 3000 Element at key NickFury : 1200 Element at key SpiderMan : 1100
Kotlin program of using functions HashMap.get(key), HashMap.replace(), HashMap.put() –
java
fun main(args: Array<String>) { var hashMap : HashMap<String, Int> = HashMap<String, Int> () //adding elements to the hashMap // using put() function hashMap.put("IronMan" , 3000 ) hashMap.put("Thor" , 100 ) hashMap.put("SpiderMan" , 1100 ) hashMap.put("Cap" , 1200 ) for (key in hashMap.keys) { println("Element at key $key : ${hashMap[key]}") } //the hashMap's elements can be accessed like this println("\nhashMap[\"IronMan\"] : " + hashMap["IronMan"]) hashMap["Thor"] = 2000 println("hashMap.get(\"Thor\") : " + hashMap.get("Thor") + "\n") //replacing some values hashMap.replace("Cap" , 999 ); hashMap.put("Thor" , 2000 ); println("hashMap.replace(\"Cap\" , 999 )" + " hashMap.replace(\"Thor\" , 2000 )) :") for (key in hashMap.keys) { println("Element at key $key : ${hashMap[key]}") } } |
Output:
Element at key Thor : 100 Element at key Cap : 1200 Element at key IronMan : 3000 Element at key SpiderMan : 1100 hashMap["IronMan"] : 3000 hashMap.get("Thor") : 2000 hashMap.replace("Cap", 999) hashMap.replace("Thor", 2000)) : Element at key Thor : 2000 Element at key Cap : 999 Element at key IronMan : 3000 Element at key SpiderMan : 1100
Time complexity of HashMap –
Kotlin HashMap provides constant time or O(1) complexity for basic operations like get and put, if hash function is properly written and it disperses the elements properly. In case of searching in the HashMap containsKey() is just a get() that throws away the retrieved value, it’s O(1) (assuming the hash function works properly).
Some other functions of Kotlin HashMap class –
- Boolean containsKey(key: K): It returns true if map contains specifies key.
- Boolean containsValue(value: V): It returns true if map maps one of more keys to specified value.
- void clear(): It removes all elements from map.
- remove(key: K): It removes the specified key and its corresponding value from map
In Kotlin, a HashMap is a collection that stores key-value pairs. Each key in a HashMap must be unique, but values can be duplicated. The HashMap class provides methods for adding, removing, and retrieving elements, as well as checking if a key or value is present in the map.
Here is an example of using HashMap in Kotlin:
Kotlin
fun main() { // create a new HashMap val myMap = hashMapOf<String, Int>() // add elements to the HashMap myMap.put( "apple" , 1 ) myMap.put( "banana" , 2 ) myMap.put( "orange" , 3 ) // print the HashMap println(myMap) // remove an element from the HashMap myMap.remove( "banana" ) // print the updated HashMap println(myMap) // check if a key is present in the HashMap val containsKey = myMap.containsKey( "apple" ) println( "Contains key 'apple': $containsKey" ) // check if a value is present in the HashMap val containsValue = myMap.containsValue( 3 ) println( "Contains value 3: $containsValue" ) } |
Output:
{apple=1, banana=2, orange=3}
{apple=1, orange=3}
Contains key ‘apple’: true
Contains value 3: true
In this example, we create a new HashMap with String keys and Int values. We then add three key-value pairs to the HashMap using the put() method. Next, we print the entire HashMap using the println() function. We then remove the key-value pair with the key “banana” using the remove() method and print the updated HashMap. Finally, we use the containsKey() and containsValue() methods to check if the HashMap contains the key “apple” and the value 3, respectively.
Advantages of HashMap:
- HashMap provides a flexible way to store key-value pairs and is easy to use.
- HashMap provides efficient O(1) time complexity for basic operations such as adding, removing, and retrieving elements.
- HashMap can be used to store a wide variety of data types, including user-defined objects.
Disadvantages of HashMap:
- HashMap uses more memory than some other data structures because it stores both keys and values.
- HashMap is not thread-safe by default, so concurrent access to a HashMap can cause data corruption or unexpected behavior. If you need to access a HashMap from multiple threads, you should use a thread-safe implementation or use synchronization to ensure thread safety.
- The order of elements in a HashMap is not guaranteed, which can be a disadvantage in some cases where element ordering is important. If you need to maintain a specific order of elements, you should use a different data structure such as a LinkedHashMap.
Please Login to comment...