在Java中通过对象变量值获取Object

时间:2015-01-15 18:36:29

标签: java

我有这样的Kvote课程:

public class Kvote {
    private static int counter = 0;
    private double[] vrednost = new double[3];
    private int id; 

    public Kvote(double v1, double v2) {
        super();
        this.vrednost[1] = v1;
        this.vrednost[2] = v2;
        this.id = counter;
        counter++;

    }

    public static int getCounter(){
        return counter;
    }
}

我在Main中创建了该类的几个对象:

Kvote k1 = new Kvote(2, 4.25);
Kvote k2 = new Kvote(1.85, 5);
Kvote k3 = new Kvote(1.62, 6.5);
Kvote k4 = new Kvote(1.72, 6);

因此,Kvote类的每个实例都有一些id,k1为0,k2为1,k3为2 ...... 是否可以通过它的id var值访问对象。例如,如果我要求Id = 2的对象,我得到对象k3 ......

我很难解释为什么我需要这个,但我知道。基本上,我的alghorytm需要使用无限数量的Kvote类对象:k1,k2,k3,k4,k5,k6,k7 ......

4 个答案:

答案 0 :(得分:2)

试试这个:

HashMap<Integer, Kvote> map = new HashMap<Integer, Kvote>();
put(k1.getId(), k1);
put(k2.getId(), k2);
put(k3.getId(), k3);
put(k4.getId(), k4);

然后使用地图按ID获取值,如:

map.get(2) => k3

另外,您需要将getId()函数添加到Kvote类。

答案 1 :(得分:1)

如果您只是按顺序给他们ID,那么您可以使用ArrayList。

List<Kvote> myList = new ArrayList<Kvote>();
myList.add(new Kvote(2, 4.25));
myList.add(new Kvote(1.85, 5));
myList.add(new Kvote(1.62, 6.5));
myList.add(new Kvote(1.72, 6));

要访问对象,只需执行以下操作:

myList.get(3); // returns the 4th item in the list

但是,如果你想对你的ID有更多的灵活性,那么你可以使用地图,就像@RoeyGolzarpoor在他的回答中所建议的那样。

答案 2 :(得分:0)

java.util.Map是支持键值对的最常见数据结构之一。有多种实现方式,其中一种是java.util.HashMap

它的工作原理如下:

Map<Integer, Kvote> kvotes = new HashMap<>();

// Save it in the Map
Kvote kvote = new Kvote(123D, 213D);
kvotes.put(kvotes.getId(), kvote);

// Retrieve the kvote
Kvote kvote = kvotes.get(123);

HashMap可以快速访问您的元素,您还可以迭代可用的键,值或条目。

// Print the kvotes
kvotes.values().stream().forEach(System.out.println(kvote.toString()));

我希望保留您添加元素的顺序(出于算法目的)我建议您使用LinkedHashMap来记住订单。 HashMap 按住订单。

答案 3 :(得分:0)

我不确定你想要的结果是什么,认为Roey的地图解决方案很好,我只是补充一下,而不是在课堂上有一个计数器,在外面有一个计数器并通过它在构造函数中的值,用于在实例化中设置id的值:

public class Kvote {

private double[] vrednost = new double[2];
private int id; 

public Kvote(double v1, double v2, int id) {
    this.vrednost[0] = v1;
    this.vrednost[1] = v2;
    this.id = id;
}

public static int getId(){
    return this.id;
}
}

在主要课程中:

int counter = 0;

Kvote k1 = new Kvote(2, 4.25, counter++);
Kvote k2 = new Kvote(1.85, 5, counter++);
Kvote k3 = new Kvote(1.62, 6.5, counter++);
Kvote k4 = new Kvote(1.72, 6, counter++);

然后把它们放在地图上。