Java-如何在HashMap中获取与字符串关联的整数
我想知道如何在HashMap中获取与字符串关联的整数:Java-如何在HashMap中获取与字符串关联的整数,java,minecraft,bukkit,Java,Minecraft,Bukkit,我想知道如何在HashMap中获取与字符串关联的整数: public HashMap<Integer, String> people; public int getAssociatedInt(Person p){ return (The thing I do not know how to get); } 公共HashMap人; 公共整数getAssociatedInt(个人p){ 返回(我不知道如何得到的东西); } 我已经试过了。获取();,但是我不太清楚怎么做。您有一个映
public HashMap<Integer, String> people;
public int getAssociatedInt(Person p){
return (The thing I do not know how to get);
}
公共HashMap人;
公共整数getAssociatedInt(个人p){
返回(我不知道如何得到的东西);
}
我已经试过了。获取();,但是我不太清楚怎么做。您有一个映射,它将
整数
s映射到字符串
s,而不是相反。要查找与给定字符串
值关联的(可能有多个)整数
键,可以在映射
sentrySet()上循环:
for(条目e:people.entrySet())
如果(如getValue().equals(value))
返回e.getKey();
但是,上述方法不处理映射到同一值的多个键。如果您想处理这个问题,可以保留一个目标键列表,并将其添加到列表中,而不是在If
-语句的主体中返回
另一种方法是维护一个将字符串映射到整数的“反向”映射,然后简单地查询该映射。您有一个将整数
s映射到字符串
s的映射,而不是相反。要查找与给定字符串
值关联的(可能有多个)整数
键,可以在映射
sentrySet()上循环:
for(条目e:people.entrySet())
如果(如getValue().equals(value))
返回e.getKey();
但是,上述方法不处理映射到同一值的多个键。如果您想处理这个问题,可以保留一个目标键列表,并将其添加到列表中,而不是在If
-语句的主体中返回
另一种方法是维护一个将字符串映射到整数的“反向”映射,然后简单地查询该映射。尝试以下操作:
public HashMap<Integer, String> people;
public int getAssociatedInt(Person p){
int indexOfPerson = -1;
if (p != null) {
for (int i = 0; i < people.size(); ++i) {
if (p.equals(people.get(i)) {
indexOfPerson = i;
break;
}
}
}
return indexOfPerson;
}
公共HashMap人;
公共整数getAssociatedInt(个人p){
int indexOfPerson=-1;
如果(p!=null){
for(int i=0;i
试试这个:
public HashMap<Integer, String> people;
public int getAssociatedInt(Person p){
int indexOfPerson = -1;
if (p != null) {
for (int i = 0; i < people.size(); ++i) {
if (p.equals(people.get(i)) {
indexOfPerson = i;
break;
}
}
}
return indexOfPerson;
}
公共HashMap人;
公共整数getAssociatedInt(个人p){
int indexOfPerson=-1;
如果(p!=null){
for(int i=0;i
或者您可以:
public Integer getAssociatedInt(Person p){
for(final int i : people.keySet())
if(people.get(i).equals(p.toString()))
return i;
// else no key found, return no key (null is the only way to capture this).
return null;
}
或者你可以:
public Integer getAssociatedInt(Person p){
for(final int i : people.keySet())
if(people.get(i).equals(p.toString()))
return i;
// else no key found, return no key (null is the only way to capture this).
return null;
}
people.put(1,“Hello”);people.get(1);
如果没有反向的Map
(可以与people
一起维护),我认为您必须循环查看键集中的整数,看看是否有任何值与此人的字符串
值匹配。@Kon他想要反向的。people.put(1,“你好”);人物。获取(1);
而不使用反向地图
(您可以将其与人物一起维护),我认为您必须循环检查键集中的整数
,看看是否有任何值与此人的字符串
值匹配。@Kon他想要相反的值。我确实认为实现这一点的正确方法是维护一个反向映射。这取决于内存是否有问题——如果没有,那么我们应该ld只需保留额外的映射(内存使用量翻倍不太可能超出限制,除非您已经接近)……但我注意到,人
被声明为公共
,这意味着从技术上讲,不可能维护这样的映射。@Jared Yes我认为在一般情况下,反向映射也可以。但是,它可能并不总是那么简单(例如,如果多个整数
指单个字符串
)。我真的认为实现这一点的正确方法是维护一个反向映射。这取决于内存是否存在问题——如果不是,那么我们应该保留额外的映射(如果内存使用率加倍,则不太可能超出限制,除非您已经接近)……但我注意到,人
被声明为公共
,这意味着从技术上讲,不可能维护这样的映射。@Jared Yes我认为在一般情况下,反向映射也可以。但是,它可能并不总是那么简单(例如,如果多个整数
指单个字符串
)。您喜欢return indexOfPerson;
而不是return-1;
,有什么原因吗?(另外,我认为如果(p!=null)
,您可能只是匆忙编写了代码。您是对的;谢谢。您喜欢return indexOfPerson;
而不是return-1;
,有什么原因吗?(另外,我认为如果(p!=null)
,您缺少了的右括号)可能只是匆忙编写了代码。您是对的,谢谢。