如何将带有3个参数的Hashmap与string,string,int一起使用。第一个字符串是一个位置,第二个字符串是不同的位置,int表示从一个到另一个的时间。
如果我创建一个键posistion1,position3,int它将告诉我position1和position3之间有多少时间。
有100个地点,我需要指定所有地点之间的时间。
答案 0 :(得分:2)
最简单的方法是使用一些Pair
类(只存储两个参数并正确实现hashCode
和equals
)作为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已生成hashCode
和equals
方法。您需要知道的是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中。如果你想得到想象,不要计算第一次请求的时间,然后在返回之前保存它。