Java Program to implement Bi Directional Map

This is a Java Program to implement Bi Directional Map. A bi-directional map is an associative data structure in which the (key, value) pairs form a one-to-one correspondence. Thus the binary relation is functional in each direction: value can also act as a key to key. A pair (a, b) thus provides a unique coupling between a and b so that b can be found when a is used as a key and a can be found when b is used as a key.

Here is the source code of the Java Program to implement Bi Directional Map. The Java program is successfully compiled and run on a Windows system. The program output is also shown below.

/**
 ** Java Program to implement Bi Directional Map
 **/
 
import java.util.Scanner;
import java.util.HashMap;
 
/** class BiDrirectionalMap */
class BiDirectionalMap
{
    private HashMap<String, String> keyVal;
    private HashMap<String, String> valKey;
 
    /** constructor **/
    public BiDirectionalMap()
    {
        keyVal = new HashMap<String, String>();
        valKey = new HashMap<String, String>();
    }    
    /** function to clear maps **/
    public void clear()
    {
        keyVal.clear();
        valKey.clear();
    }
    /** function to get size of maps **/
    public int size()
    {
        return keyVal.size();
    }   
    /** function to insert element **/
    public void put(String key, String val)
    {
        keyVal.put(key, val);
        valKey.put(val, key);
    }    
    /** function to get element **/
    public String get(String ele)
    {
        String str = keyVal.get(ele);
        if (str == null)
              str = valKey.get(ele);
 
        return str;
    }      
    /** function to remove element **/
    public void remove(String key)
    {
        String val = keyVal.get(key);
        if (val != null)
        {
            keyVal.remove(key);
            valKey.remove(val);
        }
        else
        {
            val = valKey.get(key);
            if (val != null)
            {
                keyVal.remove(val);
                valKey.remove(key);
            }
            else
                System.out.println("\nError : Not found\n");  
        }
    }        
}
 
/** Class BiDirectionalMapTest **/
public class BiDirectionalMapTest
{
    public static void main(String[] args)
    {
        Scanner scan = new Scanner(System.in);
        System.out.println("Bi Directional Map Test\n");   
 
        BiDirectionalMap bdm = new BiDirectionalMap();
 
        char ch;
        /** Perform Bi Directional Map operations **/
        do    
        {
            System.out.println("\nBi Directional Map <String, String> Operations\n");
            System.out.println("1. put ");
            System.out.println("2. get");
            System.out.println("3. remove");
            System.out.println("4. clear");
            System.out.println("5. size");
 
            int choice = scan.nextInt();            
            switch (choice) 
            {
            case 1 : 
                System.out.println("Enter key and value");
                bdm.put(scan.next(), scan.next() );                     
                break;                          
            case 2 : 
                System.out.println("Enter element");
                String ele = scan.next();
                String str = bdm.get(ele);
                if (str != null)
                    System.out.println("Result : "+ str);
                else
                    System.out.println("\nError : Not found\n");  
                break;        
            case 3 : 
                System.out.println("\nEnter element to be removed");
                bdm.remove(scan.next() );
                break;                                   
            case 4 : 
                System.out.println("\nBi Directional Map Cleared");
                bdm.clear();    
                break;    
            case 5 : 
                System.out.println("\nSize = "+ bdm.size() );
                break;         
            default : 
                System.out.println("Wrong Entry \n ");
                break;   
            }    
 
            System.out.println("\nDo you want to continue (Type y or n) \n");
            ch = scan.next().charAt(0);                        
        } while (ch == 'Y'|| ch == 'y');            
    }
}
Bi Directional Map Test
 
 
Bi Directional Map <String, String> Operations
 
1. put
2. get
3. remove
4. clear
5. size
1
Enter key and value
green mango
 
Do you want to continue (Type y or n)
 
y
 
Bi Directional Map <String, String> Operations
 
1. put
2. get
3. remove
4. clear
5. size
1
Enter key and value
banana yellow
 
Do you want to continue (Type y or n)
 
y
 
Bi Directional Map <String, String> Operations
 
1. put
2. get
3. remove
4. clear
5. size
1
Enter key and value
red apple
 
Do you want to continue (Type y or n)
 
y
 
Bi Directional Map <String, String> Operations
 
1. put
2. get
3. remove
4. clear
5. size
2
Enter element
red
Result : apple
 
Do you want to continue (Type y or n)
 
y
 
Bi Directional Map <String, String> Operations
 
1. put
2. get
3. remove
4. clear
5. size
2
Enter element
mango
Result : green
 
Do you want to continue (Type y or n)
 
y
 
Bi Directional Map <String, String> Operations
 
1. put
2. get
3. remove
4. clear
5. size
2
Enter element
apple
Result : red
 
Do you want to continue (Type y or n)
 
y
 
Bi Directional Map <String, String> Operations
 
1. put
2. get
3. remove
4. clear
5. size
5
 
Size = 3
 
Do you want to continue (Type y or n)
 
y
 
Bi Directional Map <String, String> Operations
 
1. put
2. get
3. remove
4. clear
5. size
3
 
Enter element to be removed
red
 
Do you want to continue (Type y or n)
 
y
 
Bi Directional Map <String, String> Operations
 
1. put
2. get
3. remove
4. clear
5. size
2
Enter element
apple
 
Error : Not found
 
 
Do you want to continue (Type y or n)
 
y
 
Bi Directional Map <String, String> Operations
 
1. put
2. get
3. remove
4. clear
5. size
2
Enter element
red
 
Error : Not found
 
 
Do you want to continue (Type y or n)
 
y
 
Bi Directional Map <String, String> Operations
 
1. put
2. get
3. remove
4. clear
5. size
4
 
Bi Directional Map Cleared
 
Do you want to continue (Type y or n)
 
n