Java支持关联数组吗?

7

我想知道Java中的数组是否可以像这样做:

int[] a = new int[10];
a["index0"] = 100;
a["index1"] = 100;

我知道其他语言中有类似的功能,但我不太熟悉具体的细节......只是有一些方法可以将值与字符串常量关联起来,而不仅仅是使用数字索引。在Java中是否有实现这样的功能的方法?

6个回答

18

你无法使用Java数组来完成这个操作。看起来你需要使用java.util.Map

Map<String, Integer> a = new HashMap<String, Integer>();

// put values into the map
a.put("index0", 100); // autoboxed from int -> Integer
a.put("index1", Integer.valueOf(200));

// retrieve values from the map
int index0 = a.get("index0"); // 100
int index1 = a.get("index1"); // 200

啊,原来是这样。哈希表啊?谢谢 :) - Fugogugo
2
@Fugogugo:HashMap是一个实现类;Map是接口。我建议针对Map接口进行编码,这意味着在此情况下声明您的变量为Map而不是HashMap - Matt Ball

4

我对C++一无所知,但你可能正在寻找实现Map接口的类。


啊啊啊,原来有这个Map类啊。谢谢。我是Java新手 :) - Fugogugo
@Fugogugo 由于您是Java的新手,值得注意的是您不能将任何东西都放入映射中。如果您使用TreeMap,则需要实现Comparable接口来定义键的顺序。如果您使用HashMap,请确保已经重写了被放入映射中的键的hashCode和equals方法。然而,在许多情况下,默认的hashCode和equals实现已经足够。 - Matt Wonlaw
等等,什么??这个注释太令人困惑了。 - Rishiraj Purohit

2
你需要的是 java.util.Map<Key, Value> 接口及其实现(例如 HashMap),其中 String 作为键。

@Foo:不,HashMap是更现代的版本。Hashtable是“遗留”的一个(类似于Vector/ArrayList)。 - Joachim Sauer
1
@Joachim:ArrayList 不是遗留问题。 - Matt Ball

2
要存储带有字符串键的内容,需要使用Map。在Map上无法使用方括号。在C ++中,您可以这样做,因为它支持运算符重载,但Java不支持。有一个提案添加此映射语法,但最早将在Java 8中添加

@Andrew Coleson:啊,那是一个非常愚蠢的错别字;对于犯下这个错误我深感抱歉,并感谢您指出来。已经修复。 - Tom Anderson

0
你是否在寻找 HashMap<k,v>() 类?请查看这里的 javadocs
大致上来说,使用方法如下:
HashMap<String, int> a = new HashMap<String,int>();
a.put("index0", 100);

等等。


2
Map不能使用原始类型。它必须是Map<String, Integer>;同样,通常最好将其声明为Map而不是HashMap - Matt Ball
我已经尝试过了。是的,它不能使用原始数据类型。但是概念是正确的。谢谢 :) - Fugogugo

0

Java目前还没有关联数组。但是你可以使用哈希映射作为替代方案。


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