我想使用一个集合来托管我的数据对,顺序并不重要,允许重复值,我需要快速操作/索引,所以我选择了hashmap。
我的问题是,在使用之前我是否必须首先覆盖一些内容?
Hashmap<string, myOwnDataType> mhashmap = new Hashmap ();
例如,在TreeSet中,我需要覆盖比较器才能使用我自己的自定义数据类型,在Hashmap的情况下我应该做些什么准备?
答案 0 :(得分:1)
你已经全部准备好了。 String有自己的比较器。但请添加<>
(以避免类型安全警告)并正确使用大写和小写:
HashMap<String, MyOwnDataType> mHashMap = new HashMap<>();
答案 1 :(得分:1)
地图中涉及两种类型:键的类型和值的类型。要使用您自己的类作为值类型,您不必做任何事情。这适用于HashMap
以及TreeMap
。
但是,要在HashMap
中使用您自己的类型作为键类型,您必须考虑以下两点:
HashMap
使用方法hashCode()
和equals()
查找键值对并确定两个键是否相等。这两种方法都在Object
中实现,但在大多数情况下,您需要覆盖hashCode()
和equals()
,并确保它们彼此一致(这意味着a.equals(b)
是的,然后是a.hashCode() == b.hashCode()
。
当一个对象被用作地图中的一个键时,它不能再改变了(相对于hashCode()
和equals()
。通常,哈希映射中使用的键是不可变的。 / p>
您在示例中使用的字符串可以在HashMap
中用作键,而不会出现问题。