2014-09-03 32 views
1

Awt的Dimension class可以做很多事情,在不同的數字類型之間進行轉換等等。我使用這些類來表示在每個ms需要更新的大2d世界上的單元格。如果我堅持使用Dimension類而不是使用自定義的Pair類,我可以獲得性能優勢嗎?這是我的自定義Pair類:我還沒有看到尺寸的任何地方提到,不知道Awt Dimension class vs自定義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; 
} 
} 

當我一直在尋找對實現爲什麼..

回答

1

當我一直在尋找對實現我沒見過尺寸的任何地方提到的,不知道爲什麼..

好了,Dimension可以被看作是一個Pair而不是倒過來。維度有兩個int值,而通用對可以有任何類型的組合。

Btw一個通用的對不提供更多的數據信息比有一些關係中有兩個對象。這就是爲什麼通常使用專用類比成對更優選的原因。 Dimension將這兩個值定義爲寬度和高度,沒有其他內容,因此僅通過使用Pair<Integer, Integer>就可以獲得更多信息。

除此之外,您需要注意Dimension具有整數字段,因此只能表示整數範圍,即width = 2.5是不可能的。此外,我不會使用Dimension表示位置,因爲儘管數據看起來相似,但數據的語義(含義)不是(維度定義了一個區域,而位置是點)。

您可以考慮改用Point2D.FloatPoint2D.Double

+0

單元格的表示形式是一個二維數組,我只需要使用整數,維度贏呢? – 2014-09-03 11:48:42

+0

雖然我看到我的無知,但是如果我只想用整數來定義Pair泛型,我該如何定義Pair泛型?我現在意識到我不應該有,如果我把它具體到整數,性能方面,它將與Dimension相同,對吧? – 2014-09-03 11:58:17

+1

@RyanMarv從性能的角度來看,應該沒有什麼區別。如果你需要整數位置,只考慮使用'java.awt.Point'或者使用比「Pair」更富有表現力的名字:) – Thomas 2014-09-03 12:34:53