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

时间:2016-02-28 06:22:26

标签: java arrays data-structures

array[obj][obj] = 1;

我想创建索引是用户定义对象的2D数组。这该怎么做?还是有其他一些数据结构可以做到这一点?

3 个答案:

答案 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访问数组。虽然归功于原始类型提升,但shortcharbyte可以使用,并且会自动转换为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不会保留插入顺序。

如果您遇到任何问题,请发表评论或接受是否有效。

如果您想要插入订单,可以使用树形图。