在hashmap上使用自定义类型之前,我应该先做的事情/事情吗?

时间:2017-10-12 08:08:14

标签: java collections

我想使用一个集合来托管我的数据对,顺序并不重要,允许重复值,我需要快速操作/索引,所以我选择了hashmap。

我的问题是,在使用之前我是否必须首先覆盖一些内容?

Hashmap<string, myOwnDataType> mhashmap = new Hashmap ();

例如,在TreeSet中,我需要覆盖比较器才能使用我自己的自定义数据类型,在Hashmap的情况下我应该做些什么准备?

2 个答案:

答案 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中用作键,而不会出现问题。