2014-09-03 4 views
1

Awt's Dimension class может делать много вещей, конвертируя между различными числовыми типами и т. Д. Я использую эти классы для представления ячеек в больших 2-х миров, которые необходимо обновлять за миллисекунду. Могу ли я получить удар производительности, если я все время придерживаюсь класса Dimension, вместо того, чтобы использовать свой собственный класс Pair? Это мой пользовательский класс Pair:Awt Dimension class vs custom Pair class performance

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 я не видел упоминания измерения в любом месте, интересно, почему ..

ответ

1

Когда я искал реализаций Pair я не видел упоминания измерения в любом месте, интересно, почему ..

Ну, Dimension можно было бы рассматривать как Pair, но не наоборот. Размерность имеет два значения int, а общая пара может иметь любую комбинацию типов.

Btw общая пара не предоставляет гораздо больше информации о данных, чем двух объектов в некотором отношении. Вот почему обычно использование специализированных классов предпочтительнее по парам, например. Dimension определяет два значения как ширину и высоту, так и больше ничего, поэтому вы получаете дополнительную информацию только с помощью Pair<Integer, Integer>.

Кроме того, необходимо отметить, что Dimension имеет целочисленные поля и, следовательно, может представлять только целые экстенты, то есть ширина = 2.5 не представляется возможным. Кроме того, я не использовал Dimension для представления позиций, поскольку, хотя данные кажутся похожими, семантика (значение) этих данных отсутствует (размер определяет область, а позиции - точки).

Вместо этого вы можете использовать Point2D.Float или Point2D.Double.

+0

Представление ячеек - это 2-й массив, мне нужно только работать с целыми числами, тогда выигрывает размер? –

+0

Хотя я вижу свое невежество, кому я определяю парное общее, если я хочу использовать его только с целыми числами? Теперь я понимаю, что не должен был, если бы я делал это конкретным для целых чисел, по производительности он будет таким же, как и измерение, верно? –

+1

@RyanMarv да с точки зрения производительности не должно быть никакой разницы. Если вам нужны целые позиции, используйте только «java.awt.Point» или используйте более выразительное имя, чем «Пара» :) – Thomas