array[obj][obj] = 1;
我想创建一个二维数组,其索引是用户定义的对象。这个怎么做?或者还有其他一些数据结构可以做到这一点?
最佳答案
没有Java Language Specification声明只能使用 int
访问数组。尽管由于原始类型提升,可以使用 short
、char
和 byte
,并且它们会自动转换为 int
.
要解决您的问题:您可以在对象中存储 int
索引,然后使用它来访问数组。
array[obj.getIndex()][obj.getIndex()] = 1;
如果您无法直接影响用户定义对象的代码,请强制用户实现需要 getIndex()
方法的接口(interface)
。
interface ArrayIndexable {
int getIndex();
}
或者,如果您无法强制用户实现该接口(interface),那么您可以使用将对象映射到 int
的映射来维护某种索引。
int x = ...;
int y = ...;
int[][] array = new int[x][y];
Map<SomeClass, Integer> index = new HashMap<>();
for(int i = 0; i < Math.max(x, y); i++) {
SomeClass m = ...; // object associated with i
index.put(m, i);
}
SomeClass obj = ...;
// accessing the array
array[index.get(obj)][index.get(obj)] = 1;
关于java - Java可以使用用户定义的对象作为二维数组键的索引吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35679477/