C# Java HashMap equivalent C# Java HashMap equivalent java java

C# Java HashMap equivalent


Dictionary is probably the closest. System.Collections.Generic.Dictionary implements the System.Collections.Generic.IDictionary interface (which is similar to Java's Map interface).

Some notable differences that you should be aware of:

  • Adding/Getting items
    • Java's HashMap has the put and get methods for setting/getting items
      • myMap.put(key, value)
      • MyObject value = myMap.get(key)
    • C#'s Dictionary uses [] indexing for setting/getting items
      • myDictionary[key] = value
      • MyObject value = myDictionary[key]
  • null keys
    • Java's HashMap allows null keys
    • .NET's Dictionary throws an ArgumentNullException if you try to add a null key
  • Adding a duplicate key
    • Java's HashMap will replace the existing value with the new one.
    • .NET's Dictionary will replace the existing value with the new one if you use [] indexing. If you use the Add method, it will instead throw an ArgumentException.
  • Attempting to get a non-existent key
    • Java's HashMap will return null.
    • .NET's Dictionary will throw a KeyNotFoundException. You can use the TryGetValue method instead of the [] indexing to avoid this:
      MyObject value = null;if (!myDictionary.TryGetValue(key, out value)) { /* key doesn't exist */ }

Dictionary's has a ContainsKey method that can help deal with the previous two problems.


From C# equivalent to Java HashMap

I needed a Dictionary which accepted a "null" key, but there seems to be no native one, so I have written my own. It's very simple, actually. I inherited from Dictionary, added a private field to hold the value for the "null" key, then overwritten the indexer. It goes like this :

public class NullableDictionnary : Dictionary<string, string>{    string null_value;    public StringDictionary this[string key]    {        get        {            if (key == null)             {                return null_value;            }            return base[key];        }        set        {            if (key == null)            {                null_value = value;            }            else             {                base[key] = value;            }        }    }}

Hope this helps someone in the future.

==========

I modified it to this format

public class NullableDictionnary : Dictionary<string, object>


Let me help you understand it with an example of "codaddict's algorithm"

'Dictionary in C#' is 'Hashmap in Java' in parallel universe.

Some implementations are different. See the example below to understand better.

Declaring Java HashMap:

Map<Integer, Integer> pairs = new HashMap<Integer, Integer>();

Declaring C# Dictionary:

Dictionary<int, int> Pairs = new Dictionary<int, int>();

Getting a value from a location:

pairs.get(input[i]); // in JavaPairs[input[i]];     // in C#

Setting a value at location:

pairs.put(k - input[i], input[i]); // in JavaPairs[k - input[i]] = input[i];    // in C#

An Overall Example can be observed from below Codaddict's algorithm.

codaddict's algorithm in Java:

import java.util.HashMap;public class ArrayPairSum {    public static void printSumPairs(int[] input, int k)    {        Map<Integer, Integer> pairs = new HashMap<Integer, Integer>();        for (int i = 0; i < input.length; i++)        {            if (pairs.containsKey(input[i]))                System.out.println(input[i] + ", " + pairs.get(input[i]));            else                pairs.put(k - input[i], input[i]);        }    }    public static void main(String[] args)    {        int[] a = { 2, 45, 7, 3, 5, 1, 8, 9 };        printSumPairs(a, 10);    }}

Codaddict's algorithm in C#

using System;using System.Collections.Generic;class Program{    static void checkPairs(int[] input, int k)    {        Dictionary<int, int> Pairs = new Dictionary<int, int>();        for (int i = 0; i < input.Length; i++)        {            if (Pairs.ContainsKey(input[i]))            {                Console.WriteLine(input[i] + ", " + Pairs[input[i]]);            }            else            {                Pairs[k - input[i]] = input[i];            }        }    }    static void Main(string[] args)    {        int[] a = { 2, 45, 7, 3, 5, 1, 8, 9 };        //method : codaddict's algorithm : O(n)        checkPairs(a, 10);        Console.Read();    }}