Java 如何将两个字符串[]相互映射

Java 如何将两个字符串[]相互映射,java,android,string,map,Java,Android,String,Map,我正在开发一个Android应用程序。我用HashMap将两个数组相互映射。我将这些数组更改为字符串[],并将它们映射到一起。它应该返回值,但返回null。我不确定我错在哪里。我在网上搜索过,但没有找到任何有用的东西。我的代码如下: StationList.java的一部分 Spinner2.setOnItemSelectedListener(new OnItemSelectedListener() { public void onItemSelected(AdapterVie

我正在开发一个Android应用程序。我用HashMap将两个数组相互映射。我将这些数组更改为字符串[],并将它们映射到一起。它应该返回值,但返回null。我不确定我错在哪里。我在网上搜索过,但没有找到任何有用的东西。我的代码如下:

StationList.java的一部分

Spinner2.setOnItemSelectedListener(new OnItemSelectedListener() {

        public void onItemSelected(AdapterView<?> arg0, View arg1,
                int arg2, long arg3) {
            // TODO Auto-generated method stub

                String selectedValue = arg0.getItemAtPosition(arg2).toString();

                String[] Yellow_ID = getResources().getStringArray(R.array.Yellow_ID);
                String[] Yellow_Li = getResources().getStringArray(R.array.Yellow_Line);

                Map<String[], String[]> myMap = new HashMap<String[], String[]>();
                    myMap.put(Yellow_Li, Yellow_ID);

                String[] value = myMap.get(selectedValue);
                tv12.setText(String.valueOf (value));




        }
Spinner2.setOnItemSelectedListener(新的OnItemSelectedListener(){
已选择公共视图(AdapterView arg0、视图arg1、,
整数arg2,长arg3){
//TODO自动生成的方法存根
String selectedValue=arg0.getItemAtPosition(arg2.toString();
String[]Yellow\u ID=getResources().getStringArray(R.array.Yellow\u ID);
字符串[]Yellow\u Li=getResources().getStringArray(R.array.Yellow\u行);
Map myMap=newhashmap();
myMap.put(黄色的i,黄色的ID);
String[]value=myMap.get(selectedValue);
tv12.setText(String.valueOf(value));
}

Value
TextView
中返回null。我认为这是由于值之间没有映射。我希望您能给我任何帮助。

根据您检索值的方式,在填充哈希映射时您希望执行类似操作

Map<String, String> myMap = new HashMap<String, String>();
for (int i = 0; i < Yellow_Li.length(); i++) {
     myMap.put(Yellow_Li[i], Yellow_ID[i]);
}
String value = myMap.get(selectedValue);
Map myMap=newhashmap();
对于(int i=0;i
我假设字符串数组的大小相同,因此如果它们不是,则应该在中添加该逻辑

此外,如果数组大小相同,则可以这样做,这样就不必构建哈希映射:

int index = -1;
for (int i = 0; i < Yellow_Li.length(); i++) {
    if (Yellow_Li[i].equals(selectedValue)) {
        index = i;
        break;
    }
}

String value = Yellow_ID[index]; //should do a check for -1 before you try to assign "value"
int索引=-1;
对于(int i=0;i
根据检索值的方式,在填充hashmap时,您希望执行类似的操作

Map<String, String> myMap = new HashMap<String, String>();
for (int i = 0; i < Yellow_Li.length(); i++) {
     myMap.put(Yellow_Li[i], Yellow_ID[i]);
}
String value = myMap.get(selectedValue);
Map myMap=newhashmap();
对于(int i=0;i
我假设字符串数组的大小相同,因此如果它们不是,则应该在中添加该逻辑

此外,如果数组大小相同,则可以这样做,这样就不必构建哈希映射:

int index = -1;
for (int i = 0; i < Yellow_Li.length(); i++) {
    if (Yellow_Li[i].equals(selectedValue)) {
        index = i;
        break;
    }
}

String value = Yellow_ID[index]; //should do a check for -1 before you try to assign "value"
int索引=-1;
对于(int i=0;i
您的方法存在的问题是,数组的
equals
方法使用对象标识。这使得它们不适合用作
映射
键。具体而言,
Map.get
只会给您一个匹配项(即返回非
null
引用)如果您提供原始键数组作为键参数,则不能使用另一个数组,该数组的元素按索引
与原始数组元素相等

当您尝试查找颜色时,您(显然)使用了错误的键。您使用的是
字符串而不是
字符串[]
执行
get

话虽如此,如果

  • 实际上,您使用了
    字符串[]
    作为键
  • 您以确保键对象是同一个对象的方式获得了
    String[]

您的方法存在的问题是,数组的
equals
方法使用对象标识。这使得它们不适合用作
映射
键。具体而言,
Map.get
只会给您一个匹配项(即返回非
null
引用)如果您提供原始键数组作为键参数,则不能使用另一个数组,该数组的元素按索引
与原始数组元素相等

当您尝试查找颜色时,您(显然)使用了错误的键。您使用的是
字符串而不是
字符串[]
执行
get

话虽如此,如果

  • 实际上,您使用了
    字符串[]
    作为键
  • 您以确保键对象是同一个对象的方式获得了
    String[]

您正在使用键类型为
String[]
和值类型为
String[]
Map
。但用于检索值的键类型为
String
(不是
String[]
)。因此,即使只有一个字符串,它也可能没有与字符串数组相同的哈希代码。

您使用的是带有键类型
String[]
和值类型
String[]
Map
。但用于检索值的键的类型是
String
(不是
String[]
)。因此,即使只有一个字符串,它也可能没有与字符串数组相同的哈希代码。

您要做的是在映射中创建一个条目,其中键值是对第一个字符串数组对象的引用,关联值是对第二个字符串数组对象的引用。映射不包含entri的集合我假设您正在尝试将一个数组(键)中的值映射到第二个数组(值)中的值,然后对键执行查找


您需要迭代字符串数组,每次迭代都在映射中放入一个新条目,其中键是第一个字符串数组中的元素,值是第二个字符串数组中的元素。然后您将得到所需的内容。

您要做的是在映射中创建一个条目,其中键值是引用到第一个字符串数组对象和