Java-如何在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){ 返回(我不知道如何得到的东西); } 我已经试过了。获取();,但是我不太清楚怎么做。您有一个映

我想知道如何在HashMap中获取与字符串关联的整数:

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,而不是相反。要查找与给定
字符串
值关联的(可能有多个)
整数
键,可以在
映射
s
entrySet()上循环:

for(条目e:people.entrySet())
如果(如getValue().equals(value))
返回e.getKey();
但是,上述方法不处理映射到同一值的多个键。如果您想处理这个问题,可以保留一个目标键列表,并将其添加到列表中,而不是在
If
-语句的主体中返回


另一种方法是维护一个将字符串映射到整数的“反向”映射,然后简单地查询该映射。

您有一个将
整数
s映射到
字符串
s的映射,而不是相反。要查找与给定
字符串
值关联的(可能有多个)
整数
键,可以在
映射
s
entrySet()上循环:

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)
,您缺少了
的右括号)可能只是匆忙编写了代码。您是对的,谢谢。