SortedMap Interface in Java
Last Updated :
23 Jul, 2025
SortedMap is an interface in the collection framework that is a part of java.util package and extends the Map interface. It represents a map that maintains its keys in a sorted order. The keys in a SortedMap are sorted according to their natural ordering or by a Comparator provided at the time of map creation.
- SortedMap is a sub-interface of a map that ensures keys are stored in a sorted order.
- The primary class that implements SortedMap is TreeMap which maintains elements in a Red-Black tree structure to ensure sorting.
- A comparator can be passed to customize the sorting order of the keys.
- A SortedMap orders the keys by their natural ordering (if the key implements Comparable) or by a specified Comparator (if provided).
- SortedMap does not allow null keys or null values. If we insert a null key or value it will throw an error.
Example: This example demonstrates basic operation on a SortedMap using TreeMap.
Java
// Java program to demonstartes
// basic operations on SortedMap
import java.util.SortedMap;
import java.util.TreeMap;
public class Geeks {
public static void main(String[] args)
{
SortedMap<String, Integer> s = new TreeMap<>();
// Adding elements to the sorted map
s.put("A", 1);
s.put("C", 3);
s.put("B", 2);
System.out.println("SortedMap: " + s);
// Getting values from the sorted map
int ans = s.get("A");
System.out.println("Value of A: " + ans);
// Removing elements from the sorted map
s.remove("B");
System.out.println(
"Updated SortedMap After removal:" + s);
}
}
OutputSortedMap: {A=1, B=2, C=3}
Value of A: 1
Updated SortedMap After removal:{A=1, C=3}
SortedMap Hierarchy
The diagram illustrates the Map hierarchy, showing how different Map implementations (HashMap, TreeMap, LinkedHashMap) relate to the Map and SortedMap interfaces.
Declaration of SortedMap Interface
In Java, the declaration of SortedMap Interface can be done as:
public interface SortedMap<K, V> extends Map<K, V> {
// Method signatures for SortedMap
Comparator<? super K> comparator();
K firstKey();
K lastKey();
SortedMap<K, V> headMap(K toKey);
SortedMap<K, V> tailMap(K fromKey);
SortedMap<K, V> subMap(K fromKey, K toKey);
}
Example: This example demonstrates how to use a SortedMap to store and iterate over key-value pairs in sorted order based on the keys.
Java
// Java Program to demonstrates
// how to use a SortedMap
import java.util.Iterator;
import java.util.Map;
import java.util.Set;
import java.util.SortedMap;
import java.util.TreeMap;
public class Geeks {
public static void main(String[] args) {
// Create a SortedMap using TreeMap
SortedMap<Integer, String> sm = new TreeMap<>();
// Adding key-value pairs to the SortedMap
sm.put(2, "Java");
sm.put(3, "C++");
sm.put(1, "Python");
sm.put(4, "Js");
// Get entry set
Set<Map.Entry<Integer, String>> s = sm.entrySet();
// Using iterator to traverse the SortedMap
Iterator<Map.Entry<Integer, String>> i = s.iterator();
// Traversing the map (sorted by keys)
while (i.hasNext()) {
Map.Entry<Integer, String> entry = i.next();
int k = entry.getKey();
String v = entry.getValue();
System.out.println("Key: " + k + " value: " + v);
}
}
}
OutputKey: 1 value: Python
Key: 2 value: Java
Key: 3 value: C++
Key: 4 value: Js
Creating SortedMap Objects
Since SortedMap is an interface, we cannot directly crate object of this type. we need to use a class that implements this interface such as TreeMap or ConcurrentSkipListMap for a thread-safe version.
With the introduction of Generics in Java 1.5 we can now define the type of object that will be stored in the SortedMap, making it type-safe. This means we can restrict the types of keys and values to specific classes.
Here how we can define and create a type-safe SortedMap:
// Obj1 represents the type of keys
// Obj2 represents the type of values
SortedMap<Obj1, Obj2> map = new TreeMap<Obj1, Obj2>();
Performing Various Operations on SortedMap Interface
1. Adding Elements: We can use the put() method to insert element in an SortedMap.
Example: This example, demonstrates how to insert elements into a SortedMap, where the elements are automatically sorted by their keys.
Java
// Java program to insert elements into a SortedMap
import java.io.*;
import java.util.*;
class Geeks {
public static void main(String args[]) {
// SortedMap with type parameters
// for better type safety
SortedMap<Integer, String> s1 = new TreeMap<>();
SortedMap<Integer, String> s2 = new TreeMap<>();
// Inserting the elements
s1.put(3, "Geeks");
s1.put(2, "For");
s1.put(1, "Geeks");
s2.put(3, "Geeks");
s2.put(2, "For");
s2.put(1, "Geeks");
System.out.println(s1);
System.out.println(s2);
}
}
Output{1=Geeks, 2=For, 3=Geeks}
{1=Geeks, 2=For, 3=Geeks}
2. Changing Elements: To change the element in a SortedMap, we can use the put() method again with the same key but a new value. Since the map stores elements using keys, updating the value is as simple as adding the key with its new value
Example: This example, demonstrates how to update a value in a SortedMap by reinserting the same key with a new value.
Java
// Java program to update a value in a SortedMap
import java.io.*;
import java.util.*;
class Geeks {
public static void main(String args[])
{
// Initialization of a SortedMap
// using Generics
SortedMap<Integer, String> tm
= new TreeMap<Integer, String>();
// Inserting the Elements
tm.put(3, "Geeks");
tm.put(2, "Geeks");
tm.put(1, "Geeks");
System.out.println(tm);
tm.put(2, "For");
System.out.println(tm);
}
}
Output{1=Geeks, 2=Geeks, 3=Geeks}
{1=Geeks, 2=For, 3=Geeks}
3. Removing Element: We can use the remove() method to remove an element from the SortedMap.
Example: This example demonstrates how to insert and remove elements in a SortedMap, where the elements are automatically sorted by their keys.
Java
// Java program to demonstrates how to remove the
// elements from SortedMap
import java.io.*;
import java.util.*;
class Geeks {
public static void main(String args[])
{
// Initialization of a SortedMap
// using Generics
SortedMap<Integer, String> tm
= new TreeMap<Integer, String>();
// Inserting the Elements
tm.put(3, "Geeks");
tm.put(2, "Geeks");
tm.put(1, "Geeks");
tm.put(4, "For");
System.out.println(tm);
tm.remove(4);
System.out.println(tm);
}
}
Output{1=Geeks, 2=Geeks, 3=Geeks, 4=For}
{1=Geeks, 2=Geeks, 3=Geeks}
4. Iterating Element: There are multiple ways to iterate through the Map. The most famous way is to use an enhanced for loop and get the keys. The value of the key is found by using the getValue() method.
Example: This example demonstrates how to iterate over a SortedMap and print each key-value pair.
Java
// Java program to iterate through SortedMap
import java.util.*;
class Geeks {
public static void main(String args[])
{
// Initialization of a SortedMap
// using Generics
SortedMap<Integer, String> tm
= new TreeMap<Integer, String>();
// Inserting the Elements
tm.put(3, "Geeks");
tm.put(2, "For");
tm.put(1, "Geeks");
for (Map.Entry mapElement : tm.entrySet()) {
int key = (int)mapElement.getKey();
// Finding the value
String value = (String)mapElement.getValue();
System.out.println(key + " : " + value);
}
}
}
Output1 : Geeks
2 : For
3 : Geeks
The class which implements the SortedMap interface is TreeMap.
TreeMap class which is implemented in the collections framework is an implementation of the SortedMap Interface and SortedMap extends Map Interface. It behaves like a simple map with the exception that it stores keys in a sorted format. TreeMap uses a tree data structure for storage. Objects are stored in sorted, ascending order. But we can also store in descending order by passing a comparator. Let’s see how to create a SortedMap object using this class.
Example: This example demonstrates how to create a TreeMap with a custom comparator to sort keys in descending order and perform operations like adding and removing elements.
Java
// Java program to demonstrate the
// creation of SortedMap object using
// the TreeMap class
import java.util.*;
class Geeks {
public static void main(String[] args)
{
SortedMap<String, String> tm
= new TreeMap<String, String>(new Comparator<String>() {
public int compare(String a, String b)
{
return b.compareTo(a);
}
});
// Adding elements into the
// TreeMap using put()
tm.put("India", "1");
tm.put("Australia", "2");
tm.put("South Africa", "3");
System.out.println(tm);
// Removing items from TreeMap
// using remove()
tm.remove("Australia");
System.out.println("Map after removing Element: " + tm);
}
}
Output{South Africa=3, India=1, Australia=2}
Map after removing Element: {South Africa=3, India=1}
Methods
Method | Description |
---|
comparator() | Returns the comparator used to order the keys in this map, or null if this map uses the natural ordering of its keys. |
entrySet() | Returns a Set view of the mappings contained in this map. |
firstKey() | Returns the first (lowest) key currently in this map. |
headMap(K toKey) | Returns a view of the portion of this map whose keys are strictly less than toKey. |
keySet() | Returns a Set view of the keys contained in this map. |
lastKey() | Returns the last (highest) key currently in this map. |
subMap(K fromKey, K toKey) | Returns a view of the portion of this map whose keys range from fromKey, inclusive, to toKey, exclusive. |
tailMap(K fromKey) | Returns a view of the portion of this map whose keys are greater than or equal to fromKey. |
values() | Returns a Collection view of the values contained in this map. |
Methods Inherited from Interface java.util.Map
Method | Description |
---|
clear() | This method is used to clear and remove all of the elements or mappings from a specified Map collection. |
containsKey(Object) | This method is used to check whether a particular key is being mapped into the Map or not. It takes the key element as a parameter and returns True if that element is mapped in the map. |
containsValue(Object) | This method is used to check whether a particular value is being mapped by a single or more than one key in the Map. It takes the value as a parameter and returns True if that value is mapped by any of the key in the map. |
entrySet() | This method is used to create a set out of the same elements contained in the map. It basically returns a set view of the map or we can create a new set and store the map elements into them. |
equals(Object) | This method is used to check for equality between two maps. It verifies whether the elements of one map passed as a parameter is equal to the elements of this map or not. |
get(Object) | This method is used to retrieve or fetch the value mapped by a particular key mentioned in the parameter. It returns NULL when the map contains no such mapping for the key. |
hashCode() | This method is used to generate a hashCode for the given map containing key and values. |
isEmpty() | This method is used to check if a map is having any entry for key and value pairs. If no mapping exists, then this returns true. |
keySet() | This method is used to return a Set view of the keys contained in this map. The set is backed by the map, so changes to the map are reflected in the set, and vice-versa. |
put(Object, Object) | This method is used to associate the specified value with the specified key in this map. |
putAll(Map) | This method is used to copy all of the mappings from the specified map to this map. |
remove(Object) | This method is used to remove the mapping for a key from this map if it is present in the map. |
size() | This method is used to return the number of key/value pairs available in the map. |
values() | This method is used to create a collection out of the values of the map. It basically returns a Collection view of the values in the HashMap. |
Advantages
- The SortedMap interface provides a sorted order of its elements, based on the natural order of its keys or a custom Comparator passed to the constructor. This makes it useful in situations where you need to retrieve elements in a specific order.
- Because the elements in a SortedMap are stored in a sorted order, you can predict the order in which they will be returned during iteration, making it easier to write algorithms that process the elements in a specific order.
- The SortedMap interface provides an efficient implementation of the Map interface, allowing you to retrieve elements in logarithmic time, making it useful in search algorithms where you need to retrieve elements quickly.
Disadvantages
- Inserting elements into a SortedMap can be slower than inserting elements into a regular Map, as the SortedMap needs to maintain the sorted order of its elements.
- The keys in a SortedMap must implement the java.lang.Comparable interface or a custom Comparator must be provided. This can be a restriction if you need to use custom keys that do not implement this interface.
Similar Reads
Java Tutorial Java is a high-level, object-oriented programming language used to build web apps, mobile applications, and enterprise software systems. It is known for its Write Once, Run Anywhere capability, which means code written in Java can run on any device that supports the Java Virtual Machine (JVM).Java s
10 min read
Basics
Introduction to JavaJava is a high-level, object-oriented programming language developed by Sun Microsystems in 1995. It is platform-independent, which means we can write code once and run it anywhere using the Java Virtual Machine (JVM). Java is mostly used for building desktop applications, web applications, Android
4 min read
Java Programming BasicsJava is one of the most popular and widely used programming language and platform. A platform is an environment that helps to develop and run programs written in any programming language. Java is fast, reliable and secure. From desktop to web applications, scientific supercomputers to gaming console
4 min read
Java MethodsJava Methods are blocks of code that perform a specific task. A method allows us to reuse code, improving both efficiency and organization. All methods in Java must belong to a class. Methods are similar to functions and expose the behavior of objects.Example: Java program to demonstrate how to crea
7 min read
Access Modifiers in JavaIn Java, access modifiers are essential tools that define how the members of a class, like variables, methods, and even the class itself, can be accessed from other parts of our program. They are an important part of building secure and modular code when designing large applications. In this article
6 min read
Arrays in JavaIn Java, an array is an important linear data structure that allows us to store multiple values of the same type. Arrays in Java are objects, like all other objects in Java, arrays implicitly inherit from the java.lang.Object class. This allows you to invoke methods defined in Object (such as toStri
9 min read
Java StringsIn Java, a String is the type of object that can store a sequence of characters enclosed by double quotes and every character is stored in 16 bits, i.e., using UTF 16-bit encoding. A string acts the same as an array of characters. Java provides a robust and flexible API for handling strings, allowin
8 min read
Regular Expressions in JavaIn Java, Regular Expressions or Regex (in short) in Java is an API for defining String patterns that can be used for searching, manipulating, and editing a string in Java. Email validation and passwords are a few areas of strings where Regex is widely used to define the constraints. Regular Expressi
7 min read
OOPs & Interfaces
Classes and Objects in JavaIn Java, classes and objects are basic concepts of Object Oriented Programming (OOPs) that are used to represent real-world concepts and entities. A class is a template to create objects having similar properties and behavior, or in other words, we can say that a class is a blueprint for objects.An
10 min read
Java ConstructorsIn Java, constructors play an important role in object creation. A constructor is a special block of code that is called when an object is created. Its main job is to initialize the object, to set up its internal state, or to assign default values to its attributes. This process happens automaticall
10 min read
Java OOP(Object Oriented Programming) ConceptsBefore Object-Oriented Programming (OOPs), most programs used a procedural approach, where the focus was on writing step-by-step functions. This made it harder to manage and reuse code in large applications.To overcome these limitations, Object-Oriented Programming was introduced. Java is built arou
10 min read
Java PackagesPackages in Java are a mechanism that encapsulates a group of classes, sub-packages and interfaces. Packages are used for: Prevent naming conflicts by allowing classes with the same name to exist in different packages, like college.staff.cse.Employee and college.staff.ee.Employee.They make it easier
8 min read
Java InterfaceAn Interface in Java programming language is defined as an abstract type used to specify the behaviour of a class. An interface in Java is a blueprint of a behaviour. A Java interface contains static constants and abstract methods. Key Properties of Interface:The interface in Java is a mechanism to
11 min read
Collections
Exception Handling
Java Exception HandlingException handling in Java is an effective mechanism for managing runtime errors to ensure the application's regular flow is maintained. Some Common examples of exceptions include ClassNotFoundException, IOException, SQLException, RemoteException, etc. By handling these exceptions, Java enables deve
8 min read
Java Try Catch BlockA try-catch block in Java is a mechanism to handle exceptions. This make sure that the application continues to run even if an error occurs. The code inside the try block is executed, and if any exception occurs, it is then caught by the catch block.Example: Here, we are going to handle the Arithmet
4 min read
Java final, finally and finalizeIn Java, the final, finally, and finalize keywords play an important role in exception handling. The main difference between final, finally, and finalize is listed below:final: The final is the keyword that can be used for immutability and restrictions in variables, methods, and classes.finally: The
4 min read
Chained Exceptions in JavaChained Exceptions in Java allow associating one exception with another, i.e. one exception describes the cause of another exception. For example, consider a situation in which a method throws an ArithmeticException because of an attempt to divide by zero.But the root cause of the error was an I/O f
3 min read
Null Pointer Exception in JavaA NullPointerException in Java is a RuntimeException. It occurs when a program attempts to use an object reference that has the null value. In Java, "null" is a special value that can be assigned to object references to indicate the absence of a value.Reasons for Null Pointer ExceptionA NullPointerE
5 min read
Exception Handling with Method Overriding in JavaIn Java, an exception is an unwanted or unexpected event that occurs during a program's execution, i.e., at runtime, and disrupts the normal flow of the programâs instructions. Exception handling in Java handles runtime errors and helps maintain the program's normal flow by using constructs like try
5 min read
Java Advanced
Java Multithreading TutorialThreads are the backbone of multithreading. We are living in the real world which in itself is caught on the web surrounded by lots of applications. With the advancement in technologies, we cannot achieve the speed required to run them simultaneously unless we introduce the concept of multi-tasking
15+ min read
Synchronization in JavaIn multithreading, synchronization is important to make sure multiple threads safely work on shared resources. Without synchronization, data can become inconsistent or corrupted if multiple threads access and modify shared variables at the same time. In Java, it is a mechanism that ensures that only
10 min read
File Handling in JavaIn Java, with the help of File Class, we can work with files. This File Class is inside the java.io package. The File class can be used to create an object of the class and then specifying the name of the file.Why File Handling is Required?File Handling is an integral part of any programming languag
6 min read
Java Method ReferencesIn Java, a method is a collection of statements that perform some specific task and return the result to the caller. A method reference is the shorthand syntax for a lambda expression that contains just one method call. In general, one does not have to pass arguments to method references.Why Use Met
9 min read
Java 8 Stream TutorialJava 8 introduces Stream, which is a new abstract layer, and some new additional packages in Java 8 called java.util.stream. A Stream is a sequence of components that can be processed sequentially. These packages include classes, interfaces, and enum to allow functional-style operations on the eleme
15+ min read
Java NetworkingWhen computing devices such as laptops, desktops, servers, smartphones, and tablets and an eternally-expanding arrangement of IoT gadgets such as cameras, door locks, doorbells, refrigerators, audio/visual systems, thermostats, and various sensors are sharing information and data with each other is
15+ min read
JDBC TutorialJDBC stands for Java Database Connectivity. JDBC is a Java API or tool used in Java applications to interact with the database. It is a specification from Sun Microsystems that provides APIs for Java applications to communicate with different databases. Interfaces and Classes for JDBC API comes unde
12 min read
Java Memory ManagementJava memory management is the process by which the Java Virtual Machine (JVM) automatically handles the allocation and deallocation of memory. It uses a garbage collector to reclaim memory by removing unused objects, eliminating the need for manual memory managementJVM Memory StructureJVM defines va
4 min read
Garbage Collection in JavaGarbage collection in Java is an automatic memory management process that helps Java programs run efficiently. Java programs compile to bytecode that can be run on a Java Virtual Machine (JVM). When Java programs run on the JVM, objects in the heap are created, which is a portion of memory dedicated
7 min read
Memory Leaks in JavaIn programming, a memory leak happens when a program keeps using memory but does not give it back when it's done. It simply means the program slowly uses more and more memory, which can make things slow and even stop working. Working of Memory Management in JavaJava has automatic garbage collection,
3 min read
Practice Java
Java Interview Questions and AnswersJava is one of the most popular programming languages in the world, known for its versatility, portability, and wide range of applications. Java is the most used language in top companies such as Uber, Airbnb, Google, Netflix, Instagram, Spotify, Amazon, and many more because of its features and per
15+ min read
Java Programs - Java Programming ExamplesIn this article, we will learn and prepare for Interviews using Java Programming Examples. From basic Java programs like the Fibonacci series, Prime numbers, Factorial numbers, and Palindrome numbers to advanced Java programs.Java is one of the most popular programming languages today because of its
8 min read
Java Exercises - Basic to Advanced Java Practice Programs with SolutionsLooking for Java exercises to test your Java skills, then explore our topic-wise Java practice exercises? Here you will get 25 plus practice problems that help to upscale your Java skills. As we know Java is one of the most popular languages because of its robust and secure nature. But, programmers
7 min read
Java Quiz | Level Up Your Java SkillsThe best way to scale up your coding skills is by practicing the exercise. And if you are a Java programmer looking to test your Java skills and knowledge? Then, this Java quiz is designed to challenge your understanding of Java programming concepts and assess your excellence in the language. In thi
1 min read
Top 50 Java Project Ideas For Beginners and Advanced [Update 2025]Java is one of the most popular and versatile programming languages, known for its reliability, security, and platform independence. Developed by James Gosling in 1982, Java is widely used across industries like big data, mobile development, finance, and e-commerce.Building Java projects is an excel
15+ min read