2012-12-23 40 views
0

在Java中。我想存储用户定义的对象和与其相关的整数。我应该使用哪种数据类型? 我已经试过HashMap的,但显然它不能存储对象没有equals()方法我可以使用哪种数据类型?

+2

好问题,使用状况:请问您必须要与这些对象和做这个整数?根据给定的对象快速找到一个整数?根据整数快速找到对象?迭代对象 - 整数对?让对象按关联的整数排序? –

+6

'HashMap'绝对*可以*存储不覆盖equals/hashCode的对象...您将只获取参考标识行为。现在,你怎么想要它的行为呢? –

+1

为什么重写'equals'和'hashCode'是一个问题? –

回答

2

我已经试过HashMap的,但显然它不能存储对象不 equals()方法

更准确地说,你不能用一个对象作为地图的关键,没有满足以下两个条件之一的: -

  • 同时覆盖equalshashcode,或
  • 忽略它们中的任何一个。

所以,你可以很容易地使用你的对象作为关键,而不使用equals方法作为第二个条件。

但是,如果您希望根据新创建的对象找到您的密钥,最好遵循第一个条件。因为equals方法的默认实现比较参考值的对象而不是内容本身。

+0

即使您重写equals或hashcode,它也可以正常工作 –

+0

@ rai.skumar ..当然,就存储对象而言,它可以正常工作。但你永远不会再从Map中取回你的钥匙。 –

+0

假设如果我只是覆盖等于。在这种情况下,2个相同的对象可能被散列到不同的位置,但是当等于被覆盖时,您将能够恢复您的对象。 –

0

你应该坚持哈希映射。它适用于所有情况。

这是由用户定义的一些类

public class UserDefinedObject(){ 
    } 

这里是这个类与HashMap的

import java.util.HashMap; 
import java.util.Map; 

public class Main { 

    public static void main(String[] args) { 
     Map<UserDefinedObject, Integer> stuff = new HashMap<UserDefinedObject, Integer>(); 
     UserDefinedObject userDefinedObject = new UserDefinedObject(); 
     stuff.put(userDefinedObject, 1); 
     System.out.println(stuff.get(userDefinedObject)); 
    } 
} 
相关问题