比较在hashmap中存储为值的对象

时间:2014-01-09 15:42:51

标签: java performance

我有一个hashMap,它存储我的值:

{10997=Event [Numb=0007449001, date=07.02.2008], 10998=Event [Numb=0007449001, date=08.04.2008], ...

正如您所看到的,键是一个整数,值是一个Event Object,它有一个数值和一个日期,保存为String。

我想将地图的数值与另一个值的if值进行比较。

我试过了:

if(numericVal==eventMap.get(i).toString()) {

然而,这确实不起作用。如何轻松地从HashMap和Object中获取值?

感谢您的回答!

更新

很容易,我的意思是以绩效为导向,因为我必须处理a lot的值。

2 个答案:

答案 0 :(得分:1)

首先关闭;不要将String==使用equalsIgnoreCase()进行比较(如果外壳很重要,则只需equals()

第二;考虑为Event compareTo()提供一个equals()hashCode()

一旦你掌握了组件以及它们应该在那里的原因,你就会以更优雅的方式意识到你想要做的事情。

答案 1 :(得分:1)

如果我理解正确,您要尝试比较EventObject

中的实际数值

因此,EventObject必须拥有访问者。

让我们说你的EventObject看起来像:

public class EventObject {    
    private String numericValue;
    private String date;

    public EventObject(String numericValue, String date) {
        this.numericValue = numericValue;
        this.date = date;
    }

    public String getNumericValue() {
        return numericValue;
    }

    public void setNumericValue(String numericValue) {
        this.numericValue = numericValue;
    }

    public String getDate() {
        return date;
    }

    public void setDate(String date) {
        this.date = date;
    }

}

从那里开始访问numericValue中的HashMap应该像以下一样简单:

HashMap<Integer,EventObject> map = new HashMap<>();
map.put(10997,new EventObject("0007449001", "07.02.2008"));

int keyMap = 10997;  //for sake of making obvious this is Key and not numericValue 
String numValue = hashMap.get(keyMap).getNumericValue();

然后可以通过以下方式进行比较:

if("0007449001".equals(map.get(10997).getNumericValue())) {
    System.out.println("The Date I have is: " + map.get(10997).getDate());
}

哪能得到你:

The Date I have is: 07.02.2008