当前位置: 首页 > 面试题库 >

相当于C#Java HashMap

轩辕庆
2023-03-14
问题内容

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


问题答案:

Dictionary可能是最接近的。System.Collections.Generic.Dictionary实现System.html" target="_blank">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将用新值替换现有值。
    • Dictionary如果使用[]索引,.NET 将用新值替换现有值。如果使用该Add方法,它将抛出一个ArgumentException
  • 尝试获取不存在的密钥
    • Java HashMap将返回null。
    • .NET Dictionary会抛出一个KeyNotFoundException。您可以使用该TryGetValue方法而不是[]索引来避免这种情况:
      MyObject value = null; if (!myDictionary.TryGetValue(key, out value)) { /* key doesn't exist */ }

DictionaryContainsKey方法可以帮助解决前面的两个问题。



 类似资料:
  • 问题内容: 我正在寻找Java ByteBuffer的“ C ++”。 我可能会丢失明显的内容,或者仅需要一个孤立的用法示例进行澄清。我浏览了iostream家族,它似乎可以提供基础。具体来说,我希望能够: 从字节数组/点构建缓冲区,并从缓冲区获取原语,例如getByte,getInt 使用原语(例如putByte,putInt)构建缓冲区,然后获取字节数组/指针。 问题答案: 您已经拥有,或者可

  • 问题内容: Java是否具有表示一段时间的数据类型,例如34秒,5分钟等。 我已经看到了一些TimeSpan的实现,这些实现涵盖了从12月10日到12月11日这样的时间段。 我需要的是类似C#中的TimeSpan。 问题答案: 目前还不是JDK的一部分,但是将被合并到JDK 7中-尝试Joda Time

  • 问题内容: 我正在寻找具有C ++ std :: map的通常实现特征的Java类(据我了解,这是一个自平衡二进制搜索树): 插入/删除/搜索的O(log n)性能 每个元素均由唯一键和映射值组成 按键遵循严格的弱顺序 我正在寻找带有开源或设计文档的实现;我可能最终会放弃对原始键/值的支持。 这个问题的风格类似于:std :: deque的Java等效 ,其答案是“ Java Primitive

  • 问题内容: 如果存在,则以下Java代码的C#等效项是什么: 我目前使用,这更像 是明显不同。 (忽略之间的差异和) 编辑: 为澄清起见,我不尝试定义新类,只需创建/ 的实例。 问题答案: C#中没有Java通配符。在Java中,类型类型是其中的类本身。C#中的等效项是类型,它 不是泛型的 。因此,您似乎最好的办法就是拥有一个,如果将其封装在一个类中,则可以限制您在代码中放入字典的内容(因此,这只

  • 我熟悉在Android中使用AsyncTask:创建一个子类,在子类的实例上调用execute,在UI线程或主线程上调用onPostExecute。iOS中的等价物是什么?

  • 我目前正在微软虚拟学院学习UWP。现在我面临一个关于适应性/绑定的挑战。这门课是用C语言授课的,所以我必须把C代码翻译成vb。net,因为这是我之前学的语言。直到现在还没什么大不了的: 在创建要放入GridView的UserControl时,我被要求在InitializeComponent()之后放入这行代码。 不幸的是,我不知道如何将这个表达式翻译成Visual Basic。任何帮助都将不胜感激