Awt的Dimension class可以做很多事情,在不同的数字类型等之间进行转换。我正在使用这些类来表示需要每ms更新的大2d世界中的单元格。如果我一直坚持使用Dimension类而不是使用我的自定义Pair类,我可以获得性能提升吗?这是我的自定义Pair类:
public class Pair<A, B> {
private A first;
private B second;
public Pair(A first, B second) {
super();
this.first = first;
this.second = second;
}
public static <A, B> Pair <A, B> createPair(A first, B second) {
return new Pair<A, B>(first, second);
}
@Override
public int hashCode() {
int hashFirst = first != null ? first.hashCode() : 0;
int hashSecond = second != null ? second.hashCode() : 0;
return (hashFirst + hashSecond) * hashSecond + hashFirst;
}
@Override
public boolean equals(Object other) {
if (other instanceof Pair) {
Pair otherPair = (Pair) other;
return
(( this.first == otherPair.first ||
( this.first != null && otherPair.first != null &&
this.first.equals(otherPair.first))) &&
( this.second == otherPair.second ||
( this.second != null && otherPair.second != null &&
this.second.equals(otherPair.second))) );
}
return false;
}
@Override
public String toString()
{
return "(" + first + ", " + second + ")";
}
public A getX() {
return first;
}
public B getY() {
return second;
}
}
当我在寻找Pair实现时,我没有在任何地方看到Dimension的提及,想知道为什么..
当我在寻找Pair实现时,我没有在任何地方看到Dimension的提及,想知道为什么..
好吧,Dimension
可以被视为Pair
但不是相反。维度具有两个int值,而通用对可以具有任何类型的组合。
顺便说一下,通用对没有提供更多关于数据的信息,而不是某些关系中有两个对象。这就是为什么一般使用专门的类比成对的优先,例如Dimension
将这两个值定义为宽度和高度,而不是其他任何内容,因此您只需使用Pair<Integer, Integer>
即可获得更多信息。
除此之外,你需要注意Dimension
有整数字段,因此只能表示整数范围,即宽度= 2.5是不可能的。除此之外,我不会使用Dimension
来表示位置,因为虽然数据看似相似,但数据的语义(含义)不是(维度定义了一个区域,而位置是点)。
您可以考虑使用Point2D.Float
或Point2D.Double
代替。