Java 在hashmap上使用自定义类型之前,我应该先做什么?

Java 在hashmap上使用自定义类型之前,我应该先做什么?,java,collections,Java,Collections,我想使用集合来承载我的数据对,顺序不重要,允许重复值,并且我需要快速操作/索引,所以我选择hashmap 我的问题是,在像这样使用它之前,我是否必须先覆盖某些内容 Hashmap<string, myOwnDataType> mhashmap = new Hashmap (); Hashmap mhashmap=newhashmap(); 例如,在TreeSet中,我需要重写comparator以使用我自己定制的数据类型,在Hashmap的情况下我应该做什么准备???您都已设置好

我想使用集合来承载我的数据对,顺序不重要,允许重复值,并且我需要快速操作/索引,所以我选择hashmap

我的问题是,在像这样使用它之前,我是否必须先覆盖某些内容

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

例如,在TreeSet中,我需要重写comparator以使用我自己定制的数据类型,在Hashmap的情况下我应该做什么准备???

您都已设置好了。字符串有自己的比较器。但请添加
(以避免出现类型安全警告)并正确使用大写和小写:

HashMap<String, MyOwnDataType> mHashMap = new HashMap<>();
HashMap mHashMap=newhashmap();

一切就绪。字符串有自己的比较器。但请添加
(以避免出现类型安全警告)并正确使用大写和小写:

HashMap<String, MyOwnDataType> mHashMap = new HashMap<>();
HashMap mHashMap=newhashmap();

映射涉及两种类型:键类型和值类型。要使用自己的类作为值类型,无需执行任何操作。这适用于
HashMap
以及
TreeMap

<>但是,在<代码> HashMap < /代码>中使用你自己的类型作为关键字类型,你必须考虑以下两个事情:

  • HashMap
    使用方法
    hashCode()
    equals()
    查找键值对并确定两个键是否相等。这两种方法都在
    Object
    中实现,但在大多数情况下,您需要重写
    hashCode()
    equals()
    ,并确保它们彼此一致(这意味着当
    a.equals(b)
    为真时,则
    a.hashCode()==b.hashCode()

  • 当对象用作映射中的键时,它不能再更改(关于
    hashCode()
    equals()
    。通常,哈希映射中使用的键是不可变的


您在示例中使用的字符串可以毫无问题地用作
HashMap
中的键。

映射涉及两种类型:键的类型和值的类型。要使用您自己的类作为值类型,您不必做任何事。这适用于
HashMap
TreeMap

<>但是,在<代码> HashMap < /代码>中使用你自己的类型作为关键字类型,你必须考虑以下两个事情:

  • HashMap
    使用方法
    hashCode()
    equals()
    查找键值对并确定两个键是否相等。这两种方法都在
    对象中实现,但在大多数情况下,您需要覆盖
    hashCode()
    equals()
    并确保它们彼此一致(这意味着当
    a.equals(b)
    为真时,则
    a.hashCode()==b.hashCode()

  • 当对象用作映射中的键时,它不能再更改(关于
    hashCode()
    equals()
    。通常,哈希映射中使用的键是不可变的


您在示例中使用的字符串可以毫无问题地用作
HashMap
中的键。

javadoc是找到这些问题答案的最佳场所。在您的情况下(字符串键),您不需要做任何事情。如果您执行基于键排序(使用字符串)之类的操作,您不需要做任何事情,如果它基于值,那么您应该使用comparator在myOwnDataType中执行此类排序。@assylias否,我希望字符串是键,myOwnDataType是值,我是否至少需要重写一个comparator?@RajuSharma我需要让myOwnDataType实现comparable吗???@VictorCharlie23,是的,如果您愿意的话o根据值执行一些排序..然后是javadoc是找到这些问题答案的最佳位置。在您的情况下(字符串键),您不必做任何事情。如果您执行基于键排序之类的操作(使用字符串),则无需做任何事,如果它基于值,那么您应该使用comparator在myOwnDataType中执行此类排序。@assylias否,我希望字符串是键,myOwnDataType是值,我是否至少需要重写一个comparator?@RajuSharma我需要让myOwnDataType实现comparable吗???@VictorCharlie23,是的,如果您愿意的话o根据值执行一些排序..然后是