java - Java可以使用用户定义的对象作为二维数组键的索引吗?

标签 java arrays data-structures

array[obj][obj] = 1;

我想创建一个二维数组,其索引是用户定义的对象。这个怎么做?或者还有其他一些数据结构可以做到这一点?

最佳答案

没有Java Language Specification声明只能使用 int 访问数组。尽管由于原始类型提升,可以使用 shortcharbyte,并且它们会自动转换为 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/

相关文章:

c++ - 如何初始化静态 arduino (C) 数据结构,然后使用它们?

java - 二叉树 - 随机生成器

java - 为什么在我的查询中添加 Where 子句时没有得到结果?

javascript - 使用映射函数格式化数据+在数组中获取数组但不想要

arrays - ArraySort 回调未按正确顺序对我的数组进行排序

sql - 在 BigQuery 中创建具有重复嵌套列的表语句

java - 采用 Supplier<String> 方法的模拟方法不起作用

java - 计算 Java 服务器中 GC 时间的百分比

java - 将 .pem 文件转换为 .p12 以在 ios 中推送通知

c# - 将项目添加到 string[] 数组