从 Java 世界进入 C# 世界是否存在等效的 HashMap?如果没有,你会推荐什么?
最佳答案
Dictionary
可能是最接近的。 System.Collections.Generic.Dictionary
实现 System.Collections.Generic.IDictionary
接口(interface)(类似于Java的Map
接口(interface))。
您应该注意的一些显着差异:
- 添加/获取项目
- Java 的 HashMap 具有用于设置/获取项目的
put
和get
方法myMap.put(key, value)
MyObject 值 = myMap.get(key)
- C# 的字典使用
[]
索引来设置/获取项目myDictionary[key] = value
MyObject 值 = myDictionary[key]
- Java 的 HashMap 具有用于设置/获取项目的
null
键- Java 的
HashMap
允许空键
如果您尝试添加空键, - .NET 的
Dictionary
会抛出ArgumentNullException
- Java 的
- 添加重复键
- Java 的
HashMap
会将现有值替换为新值。
如果您使用 - .NET 的
Dictionary
会将现有值替换为新值。如果您使用Add
方法,它会改为抛出ArgumentException
。
[]
索引, - Java 的
- 尝试获取不存在的 key
- Java 的
HashMap
将返回 null。 - .NET 的
Dictionary
将抛出KeyNotFoundException
。您可以使用TryGetValue
方法而不是[]
索引来避免这种情况:
MyObject 值 = null; if (!myDictionary.TryGetValue(key, out value)) {/* 键不存在 */}
- Java 的
Dictionary
有一个 ContainsKey
可以帮助解决前两个问题的方法。
关于C# Java HashMap 等价物,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1273139/