Java:创建一个以字母字符作为索引的数组

Java:创建一个以字母字符作为索引的数组,java,arrays,indexing,Java,Arrays,Indexing,是否可以在Java中创建一个按字母字符('a'到'z')而不是按整数索引的数组 例如,对于这样一个数组“a”,我希望以这种方式使用它 print (a['a']); 不,你不能那样做。在这种情况下,您应该使用Map。使用Map Map myMap=newhashmap(); myMap.put('a',某物); 打印(myMap.get('a')); 另一方面,正如其他人已经建议的那样,您可以使用char作为索引(但您将保留所有数组元素0…'a'-1为空): String[]a=新字符串['

是否可以在Java中创建一个按字母字符('a'到'z')而不是按整数索引的数组

例如,对于这样一个数组“a”,我希望以这种方式使用它

print (a['a']);

不,你不能那样做。在这种情况下,您应该使用
Map

使用
Map

Map myMap=newhashmap();
myMap.put('a',某物);
打印(myMap.get('a'));
另一方面,正如其他人已经建议的那样,您可以使用char作为索引(但您将保留所有数组元素
0…'a'-1
为空):

String[]a=新字符串['z'+1];
a['a']=“你好,世界”;
System.out.println(a['a']);

我认为这是一个重复的问题!看


您应该使用映射将字母映射到值,然后调用get来获取值。

像这样简单的东西怎么样

public static int getLetterValue(char letter) {
    return (int) Character.toUpperCase(letter) - 64;
}
并像这样使用它:

System.out.println(a[getLetterValue('a'));
就目前情况而言,这将很难失败。您需要检查它是否在范围内等

或者,您可以实现Java列表接口并重写.get和.add方法,以便它们可以使用chars。但这就引出了我的下一点


最好使用能够更好地处理异常的数据结构,并且是为这种用例而设计的。A是一个更好的选择。

是和否。是的,因为您可以这样做,它将编译。请尝试以下代码:

class foo {
    public static void main(String[] args) throws Exception {
        int a[] = new int[100];
        a['a'] = '1';
        System.out.printf("%d\n", a['a']);
    }
}

不,因为字符将隐式转换为int,这听起来不像您要查找的。

您要查找的数据结构在Java land中称为
Map

这种数据结构有多种名称,如PHP中的关联数组;C#中的词典,Python;Ruby中的hash等导致了这种混乱

是否可以在Java中创建一个由字母字符索引的数组 ('a'到'z')而不是整数

当然有可能。
您可以这样做:

char theChar = 'x';  
print (a[theChar - 'a']);   
或者假设只处理ASCII字符串,只声明大小为256的数组。用户可以使用您的角色直接索引数组

char[] a = new char[256];   
char theChar = 'x';  
print (a[theChar]);    
现在你不在乎它是大写还是小写或其他任何形式。

实际上,如果您对ASCII字符串感兴趣,那么使用
映射
与简单数组相比可能会有点过头。数组不会浪费太多空间,对于这样一个简单的任务来说,
映射(一个非常有效的构造)可能太多了。

您可以创建一个包含26个元素的数组,并始终从字符索引中减去
'a'

int[] array = new int[26];
array['a'-'a']=0;
array['b'-'a']=1;
\\ etc...

你可以这样做:-例如:

char[] a = new char[]{'s','t'};
int[] result = new int[256];
result[a[0]]= 100;
System.out.println(result['s']);//will print 100

新字符串['z'+1]
创建大小为
123
的数组。最好将其声明为
新字符串[128]
以处理基本ASCII,或
新字符串[256]
以完全处理ASCII字符。为什么?为了清楚起见,我不会分配太多。更好地显示您的意图,额外的空间是微不足道的,而此代码可能会回答问题,提供有关此代码为什么和/或如何回答问题的附加上下文可提高其长期价值。