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

时间:2012-06-17 07:22:02

标签: java arrays indexing

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

使用这样的数组“a”,我想以这种方式使用,例如

print (a['a']);

9 个答案:

答案 0 :(得分:8)

  

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

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

char theChar = 'x';  
print (a[theChar - 'a']);   

或假设只处理ASCII字符串只是声明大小为256的数组。使用您的字符直接索引数组。

char[] a = new char[256];   
char theChar = 'x';  
print (a[theChar]);    

现在你不在乎它是大写/小写还是其他什么 实际上,如果你感兴趣专门针对ASCII字符串使用Map与简单数组相比可能会过度。数组不会浪费太多空间,也许Map(一种非常有效的结构)对于这么简单的任务来说太过分了。

答案 1 :(得分:5)

改为使用Map

Map<Character, Object> myMap = new HashMap<Character, Object>();
myMap.put('a', something);

print(myMap.get('a'));

另一方面,正如其他人已经建议的那样,你可以使用char作为索引(但是你可以将所有数组元素0...'a'-1留空):

String[] a = new String['z' + 1];
a['a'] = "Hello World";
System.out.println(a['a']);

答案 2 :(得分:3)

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

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

答案 3 :(得分:2)

这样简单的事情怎么样?

public static int getLetterValue(char letter) {
    return (int) Character.toUpperCase(letter) - 64;
}

并像这样使用它:

System.out.println(a[getLetterValue('a'));

现在这种情况很难实现。你需要检查它是否在范围内等。

或者,您可以实现Java List接口并覆盖.get和.add方法,以便它们可以使用chars。但这让我想到了下一点。

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

答案 4 :(得分:1)

是和否。是的,因为你可以做到并且它会编译。请尝试以下代码:

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']);
    }
}

不,因为字符会被隐式转换为整数,这听起来并不像你想要的那样。

答案 5 :(得分:0)

您正在寻找的数据结构在Java land中称为Map

这种数据结构以各种名称为人所知,例如PHP中的关联数组; C#中的字典,Python; Ruby等中的哈希导致了这种混乱。

答案 6 :(得分:0)

你可以这样做: - 例如:

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

答案 7 :(得分:-1)

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

答案 8 :(得分:-2)

我认为这是一个重复的问题!见Can Java use String as an index array key? (ex: array["a"]=1;)

您应该使用地图将字母映射到值,并调用get来获取值。