Java可以使用用户定义的对象作为2D数组键的索引吗?

Java可以使用用户定义的对象作为2D数组键的索引吗?,java,arrays,data-structures,Java,Arrays,Data Structures,我想创建索引为用户定义对象的二维数组。如何做到这一点?或者有其他数据结构可以执行此操作?在数组中,索引只能是以下短、字节、字符或int中的一个。 对于您的用例,您可能希望使用HashMap,它是键和相应值的集合。键可以是任何用户定义的对象,值也可以是任何定义的对象。 一个简单的hashmap示例,其中键的类型为String,值的类型为Double array[obj][obj] = 1; 否表示只能使用int访问数组。尽管由于原语类型的提升,short、char和byte也可以使用,而且它们会

我想创建索引为用户定义对象的二维数组。如何做到这一点?或者有其他数据结构可以执行此操作?

在数组中,索引只能是以下短、字节、字符或int中的一个。 对于您的用例,您可能希望使用HashMap,它是键和相应值的集合。键可以是任何用户定义的对象,值也可以是任何定义的对象。 一个简单的hashmap示例,其中键的类型为String,值的类型为Double

array[obj][obj] = 1;
否表示只能使用
int
访问数组。尽管由于原语类型的提升,
short
char
byte
也可以使用,而且它们会自动转换为
int

interface ArrayIndexable {

    int getIndex();

}
要解决您的问题:您可以在对象中存储
int
索引,然后使用该索引访问数组

  HashMap hm = new HashMap();
  // Put elements to the map
  hm.put("Zara", new Double(3434.34));
  hm.put("Mahnaz", new Double(123.22));
  hm.put("Ayan", new Double(1378.00));
  hm.put("Daisy", new Double(99.22));
  hm.put("Qadir", new Double(-19.08));
如果无法直接影响用户定义对象的代码,请强制用户实现需要
getIndex()
方法的
接口

array[obj.getIndex()][obj.getIndex()] = 1;
或者,如果无法强制用户实现该界面,则可以使用将对象映射到
int
的映射来维护某种索引

interface ArrayIndexable {

    int getIndex();

}
intx=。。。;
int y=。。。;
int[][]数组=新的int[x][y];
映射索引=新的HashMap();
对于(int i=0;i
不,它数组索引在java中只能是整数,但有一种方法可以实现这一点

使用hashmap将数组索引与对象关联,对于每个值,使用对象作为键检索索引值并将其用作索引

//这个例子会帮助你

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;
import java.util.ArrayList;
导入java.util.array;
导入java.util.HashMap;
公共课堂实验{
公共静态void main(字符串[]args){
int a[]=新int[10];
HashMap=新的HashMap();
对于(int i=0;i<10;i++){
map.put(new Student(),i);
a[i]=i;
}
ArrayList al=新的ArrayList(map.keySet());
int x;
对于(int i=0;i
但是请记住hashmap并不保留插入顺序

请评论,如果你面临任何问题或接受如果工作


如果需要插入顺序,可以使用treemap。

如果必须使用数组,请调用chrylis注释的“array.newInstance()”,使用Map。尽管如此,请记住,您可能需要为keyObj实现
hashCode
equals