如何使用三个参数创建Java Hashmap

时间:2014-05-08 12:44:11

标签: java list hash parameters hashmap

如何将带有3个参数的Hashmap与string,string,int一起使用。第一个字符串是一个位置,第二个字符串是不同的位置,int表示从一个到另一个的时间。

如果我创建一个键posistion1,position3,int它将告诉我position1和position3之间有多少时间。

有100个地点,我需要指定所有地点之间的时间。

3 个答案:

答案 0 :(得分:2)

最简单的方法是使用一些Pair类(只存储两个参数并正确实现hashCodeequals)作为HashMap的键。有一个实现here或者您可以编写自己的实现,更具体地针对您的目的(使用更合理的变量和方法名称)。

答案 1 :(得分:1)

HashMap将一个变量映射到另一个变量。您希望使用两个变量作为键,因此您可以创建一个简单的Coordinates类。

class Coordinates {
    final int x;
    final int y;
    public Coordinates(int x, int y) {
        this.x = x;
        this.y = y;
    }
    @Override
    public int hashCode() {
        final int prime = 31;
        int result = 1;
        result = prime * result + x;
        result = prime * result + y;
        return result;
    }
    @Override
    public boolean equals(Object obj) {
        if (this == obj)
            return true;
        if (obj == null)
            return false;
        if (getClass() != obj.getClass())
            return false;
        Coordinates other = (Coordinates) obj;
        if (x != other.x)
            return false;
        if (y != other.y)
            return false;
        return true;
    }
    @Override
    public String toString() {
        return "<"+x+","+"y"+">";
    }
}

在此代码中,Eclipse已生成hashCodeequals方法。您需要知道的是hashCode生成一个数字,地图用作您坐标的标识符,equals检查两个坐标是否指向同一个地方。

然后,您可以使用Map<Coordinates,String>作为地图。要添加您使用的内容:

yourMap.add(new Coordinates(2,3), "A String")

要检索您使用的内容

yourMap.get(new Coordinates(2,3)

答案 2 :(得分:0)

如果我理解正确,你想要创建一个position1,position2的地图,它在地图中保存该对的某些属性。首先,您需要确保地图不会太大。对于小型实例,10,000个条目并不大。

创建一个覆盖equals()(和hashCode()的PositionPair类,因为它们需要同意。)您可以使用该类作为Map中的键,它可以回答您的问题。

或者您可以简单地将该属性添加到类中并将实例存储在List中。如果你想得到想象,不要计算第一次请求的时间,然后在返回之前保存它。