Java可以使用字符串作为索引数组的键吗?(例如:array["a"]=1;)

46

Java可以使用String作为索引数组的键吗?例如:

array["a"] = 1;

3
多维数组如 array["a"]["b"] 怎么处理? - Vikas Kumar
4个回答

82

不行。

要做类似这样的事情,你需要使用一个Map(映射)。

Map<String, Integer> aMap = new HashMap<String, Integer>();
aMap.put("a" , Integer.valueOf(1));

6
+1,但是你可以使用Integer.valueOf(1),因为并不真正需要一个新的Integer实例吗? 实际上,你可以直接使用常量1,而不需要无谓地进行包装,对吗? - mre
4
不使用常量的唯一优点是,它可以适用于在自动拆箱引入之前的1.5版本以下的版本。但对于所有现代版本来说,我同意使用常量更好! - Michael Berry

42

不行 - 你需要使用map来实现:

Map<String, Integer> map = new HashMap<>();
map.put("a", 2);

接下来获取它:

int val = map.get("a"); //2

你只能在数组中使用方括号语法,不能在任何集合中使用。因此,类似以下的内容:

int val = map["a"]; //Compile error

永远是不合法的。您必须使用 get() 方法。


15
不,那将是Java中的一个Map
(类型将为Map<String,Integer>。)

6
不,它们不能。但是它们可以使用字符,字母表的ASCII值将用作键索引。
考虑:
    String[] a = new String['a' + 1];
    a['a'] = "Hello";
    int[] b = new int['a' + 3];
    b['c'] = 5;

    System.out.println(a[97]);
    System.out.print(b[99]);

这将输出

Hello
5

您的数组大小为98来存储两个值,而99(对于“c”)超出了范围。 - cyroxis
你提出了一些很好的观点。除非答案被编辑,否则我无法改变我的投票。 - cyroxis
完成。我进行了小的编辑以重新激活答案。如果可以的话,您能否点赞,以便引起对这个问题正确答案的关注? - goonerify
1
虽然解决方法是一种技术上的解决方案,但在10,000个案例中,这个解决方法在9,999个案例中都是一个非常、非常、非常糟糕的建议。我建议你发布一个严肃的免责声明,否则你将继续被投票反对。注意:我个人没有投票反对你。但我差点就要这样做了。 - tony gil
4
想指出一点:原帖的意思是想知道数组的索引是否可以是字符串,而不是字符。 - NurShomik
显示剩余5条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接