我正在编写一个Java程序,它具有带x和y位置的Character对象。我想知道将对象的坐标存储在数组中是否更好,或者只是将位置存储为两个整数。
我可以将它存储在一个数组中:
Integer[] pos = {1, 5};
或两个整数:
Integer x = 1;
Integer y = 5;
哪个更好?
答案 0 :(得分:3)
public class Coordinate
{
public final int x;
public final int y;
public Coordinate(@Nonnull final int x, @Nonnul final int y)
{
this.x = x;
this.y = y;
}
public String toString() { return String.format("%d/%d", this.x, this.y); }
public int hashCode() { return this.toString().hashCode(); }
public boolean equals(@Nullable final Object o) { return this.equals((Coordinate)o); }
public boolean equals(@Nullable final Coordinate c) { return this.x = c.x && this.y == c.y; }
}
上述课程几乎是一般操作的最低级别 使用标准库容器和行为编程案例 正确。工作时
.equals()
和.hashCode()
很重要 特别是Map
个容器。.toString()
是一个很好的方式来获得一个 良好的人类可读表示和一致的.hashCode()
at 同时。此设计还避开了
这个设计中的setters
和getters
,因为它们是不可变的 句法开销。
getters
只是很好的性能,因为JIT
编译器会 最终内联它们因为使用final
是对优化器的暗示。我只是因为空间和风格原因选择不包括它们。
在正常情况下,没有多少能够击败不可变数据的结构,并且您可以获得thread
安全性而不会出现锁定/同步问题。
@Nonnull
和@Nullable
注释可从com.google.code.findbugs
JSR-305库获得。