array[obj][obj] = 1;
我想创建一个二维数组,其索引是用户定义的对象。如何做到这一点?或者是否有其他数据结构可供使用?
array[obj][obj] = 1;
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));
不,Java语言规范指出数组只能使用int
进行访问。但由于原始类型提升的作用,short
、char
和byte
也可以被使用,因为它们会自动转换为int
。
解决您的问题:您可以在对象内部存储一个int
索引,然后使用它来访问数组。
array[obj.getIndex()][obj.getIndex()] = 1;
getIndex()
方法的 interface
。interface ArrayIndexable {
int getIndex();
}
如果你不能强制用户实现接口的话,那么你可以使用一个映射表来维护一些索引,将对象映射到一个整数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;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap;
public class Experiment {
public static void main(String[] args) {
int a[]=new int[10];
HashMap<Student,Integer>map=new HashMap<>();
for (int i = 0; i < 10; i++) {
map.put(new Student(),i);
a[i]=i;
}
ArrayList al=new ArrayList(map.keySet());
int x;
for (int i = 0; i < al.size(); i++) {
x=map.get(al.get(i));
System.out.print(a[x] + " " + " ");
}
}
}
class Student{
int a,b;
}
但请记住,哈希映射不保留插入顺序。
如果您遇到任何问题,请评论;如果可以使用,请接受。
如果您想要插入顺序,可以选择树映射。