C# Java HashMap 等效项

2022-08-31 04:38:44

从Java世界进入C#世界,有没有HashMap等价物?如果不是,你会推荐什么?


答案 1

字典可能是最接近的。 实现 System.Collections.Generic.IDictionary 接口(类似于 Java 的接口)。System.Collections.Generic.DictionaryMap

您应该注意的一些显着差异:

  • 添加/获取项目
    • Java的HashMap具有设置/获取项目的和方法putget
      • myMap.put(key, value)
      • MyObject value = myMap.get(key)
    • C#的字典使用索引来设置/获取项目[]
      • myDictionary[key] = value
      • MyObject value = myDictionary[key]
  • null钥匙
    • Java允许空键HashMap
    • .NET 会抛出一个 if 你尝试添加一个空键DictionaryArgumentNullException
  • 添加重复的密钥
    • Java将用新值替换现有值。HashMap
    • .如果使用索引,NET 将用新值替换现有值。如果使用该方法,它将改为抛出一个 .Dictionary[]AddArgumentException
  • 尝试获取不存在的密钥
    • Java 将返回 null。HashMap
    • .NET's 将抛出一个 .您可以使用 TryGetValue 方法而不是索引来避免这种情况:DictionaryKeyNotFoundException[]
      MyObject value = null; if (!myDictionary.TryGetValue(key, out value)) { /* key doesn't exist */ }

Dictionary的 包含方法可以帮助处理前两个问题。


答案 2

C# 等效于 Java HashMap

我需要一个接受“空”键的字典,但似乎没有本地键,所以我写了自己的字典。实际上,这很简单。我从字典继承,添加了一个私有字段来保存“null”键的值,然后覆盖了索引器。它是这样的:

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;
            }
        }
    }
}

希望这能帮助将来的人。

==========

我将其修改为此格式

public class NullableDictionnary : Dictionary<string, object>