我正在创建一个必须处理很多点的 java 程序。当我说很多时,我指的是超过 100,000 点。此外,我将不得不一遍又一遍地创建点。我担心这个对象创建会减慢我的算法时间,并占用大量内存。
我想出了几个可能的解决方案,这些可行吗?有没有更好的方法来处理这种情况?
解决方案 1) -A 点“工厂”,所有点都被发送到该点而不是被销毁。在这里,它们将被回收,因此我们不必重新创建对象。
public class PointFactory {
public final static List<Point> unused = new ArrayList<Point>();
public static void disposePoint( Point point ){
unused.add( point );
}
public static void disposePoints( List<Point> points ){
for( Point point: points )
unused.add( point );
}
public static Point newPoint( int x, int y ){
if( unused.isEmpty() )
return new Point( x, y );
else{
Point point = unused.get(0);
point.x = x;
point.y = y;
return point;
}
}
}
解决方案 2) 与解决方案 1 非常相似,但使用了新的结构“XY”,以避免不必要的开销。我只需要 X 和 Y 值。
public class XYFactory {
public final static List<XY> unused = new ArrayList<XY>();
public static void disposeXY( XY xy ){
unused.add( xy );
}
public static XY newXY( int x, int y ){
if( unused.isEmpty() )
return new XY( x, y );
else{
XY xy = unused.get(0);
xy.x = x;
xy.y = y;
return xy;
}
}
}
public class XY {
public XY( int x, int y ){
this.x = x;
this.y = y;
}
public int x;
public int y;
public boolean equals( Object o ){
if( !( o instanceof XY ) )
return false;
XY xy = (XY)o;
return xy.x == x && xy.y == y;
}
}