C# Java HashMap 等价物

新手上路,请多包涵

从 Java 世界进入 C# 世界是否有等效的 HashMap?如果不是你会推荐什么?

原文由 John 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 1k
2 个回答

Dictionary 可能是最接近的。 System.Collections.Generic.Dictionary 实现了 System.Collections.Generic.IDictionary 接口(类似于Java的 Map 接口)。

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

  • 添加/获取项目

    • Java的HashMap有 putget 设置/获取项目的方法
      • myMap.put(key, value)
      • MyObject value = myMap.get(key)
    • C# 的字典使用 [] 设置/获取项目的索引
      • myDictionary[key] = value
      • MyObject value = myDictionary[key]
  • null

    • Java的 HashMap 允许空键
    • .NET 的 Dictionary 抛出 ArgumentNullException 如果您尝试添加空键
  • 添加重复键

    • Java 的 HashMap 将用新值替换现有值。
    • 如果您使用 [] 索引,.NET 的 Dictionary 将用新值替换现有值。如果您使用 Add 方法,它会抛出一个 ArgumentException
  • 试图获取不存在的密钥

    • Java 的 HashMap 将返回 null。
    • .NET 的 Dictionary 将抛出 KeyNotFoundException 。您可以使用 TryGetValue 方法而不是 [] 索引来避免这种情况:

    MyObject value = null; if (!myDictionary.TryGetValue(key, out value)) { /* key doesn't exist */ }

Dictionary 的有一个 ContainsKey 方法可以帮助处理前两个问题。

原文由 Powerlord 发布,翻译遵循 CC BY-SA 4.0 许可协议

C# 等同于 Java HashMap

我需要一个接受“空”键的字典,但似乎没有本地字典,所以我自己写了一个。其实很简单。我继承自 Dictionary,添加了一个私有字段来保存“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>

原文由 KeithC 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
logo
Stack Overflow 翻译
子站问答
访问
宣传栏