我有这样的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 ......
答案 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++);
然后把它们放在地图上。