我需要在Java中为每个矩形对象关联一个惟一键。键是双数据类型,矩形显然是矩形数据类型。
目前,我在一个向量中有矩形,但它们对我来说没有多大用处,除非我也可以访问它们的键,如上面第一段所述。
我会做一个2d数组,第一列是键,第二列是矩形,但在数组中的行数将需要改变所有的时间,所以我不认为数组会工作。我已经研究了向量和数组列表,但我担心是否能够搜索和切片数据。
谁能告诉我一些简单的java代码创建,然后访问与行数可变的2D数据集?
目前,我的原型看起来像:
ArrayList<Double> PeakList = new ArrayList<Double>();
Vector<Rectangle> peakVector = new Vector<Rectangle>();
Vector<Double> keyVector = new Vector<Double>();
if(PeakList.contains((double)i+newStartingPoint)){
Rectangle myRect = new Rectangle(x2-5, y2-5, 10, 10);
boolean rectFound = peakVector.contains(myRect);
System.out.println("rectFound is: "+rectFound);
Double myPeak = ((double)i+newStartingPoint);
if(rectFound!=true){
peakVector.add(myRect);
keyVector.add(myPeak);
System.out.println("rectFound was added.");
}else{System.out.println("rectFound was NOT added.");}
}
然后,我用如下方式枚举数据以供后续处理:
Enumeration e = peakVector.elements();
while (e.hasMoreElements()) {
g2.fillRect(peakVector.lastElement().x, peakVector.lastElement().y, 10, 10);
}
如您所见,随后无法将键与矩形集成。这就是为什么我正在寻找一个2D对象使用。谁能告诉我如何修复这段代码,以便我可以将键与矩形关联起来,并随后访问适当关联的数据?
为什么不直接使用HashMap<Double, Rectangle>
呢?
编辑:不,这有明显的问题,因为没有保证两个双精度将彼此相等,即使在数字上他们应该。一定要翻倍吗?是否可以使用其他数字或字符串表示形式,如Long?是否存在你想要模拟的物理现实?
为什么不使用Map
?它们专门设计用于将键与值关联起来。您可以使用keySet()
遍历映射的键,使用valueSet()
遍历值,使用entrySet()
同时遍历键和值
A Map
肯定是正确的答案,您不必担心映射函数的域或上域的基数性。如果将double
作为关键数据类型,则禁止使用某些预定义类型。
我会用TreeMap<Double, Rectangle>
,只是因为自然排序是用来对结构内的条目进行排序的,所以有一个双精度是完全允许的,但是你会有检索问题(我实际上使用自己的float作为映射的键,从来没有遇到一些预防措施的问题,但这主要取决于你的数据的性质。