array[obj][obj] = 1;
我想创建索引是用户定义对象的2D数组。这该怎么做?还是有其他一些数据结构可以做到这一点?
答案 0 :(得分:0)
在数组中,索引只能是以下short,byte,char或int之一。 对于您的用例,您可能希望使用HashMap,它是键和相应值的集合。键可以是任何用户定义的对象,值也可以是任何已定义的对象。 一个简单的hashmap示例,其中键的类型为String,值的类型为Double。
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));
答案 1 :(得分:0)
没有Java Language Specification表示只能使用int
访问数组。虽然归功于原始类型提升,但short
,char
和byte
可以使用,并且会自动转换为int
。
解决您的问题:您可以在对象中存储int
索引,然后使用它来访问数组。
array[obj.getIndex()][obj.getIndex()] = 1;
如果您无法直接影响用户定义对象的代码,请强制用户实施需要interface
方法的getIndex()
。
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;
答案 2 :(得分:0)
不,它的数组索引在java中只能是整数,但有一种方法可以实现这一点。
使用hashmap将数组索引关联到对象,并且对于每个值,使用object作为键来检索索引值,并将其用作索引。
//这个例子可以帮助你
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;
}
但请记住,hashmap不会保留插入顺序。
如果您遇到任何问题,请发表评论或接受是否有效。
如果您想要插入订单,可以使用树形图。