2

オブジェクトへの参照をグローバルに更新したい (オブジェクトが更新されたときにオブジェクトへのすべての参照を更新する (参照への参照)とほぼ同じ質問)。

次のコード構造があります。

class Triangle {
    Vertex pos[];
    //...
}

ArrayList<Vertex> vertices;

ArrayList<Triangle> triangles;

// Load triangles from file. After all triangles are loaded,
// fill the vertices list with all vertices of all triangles.

コード例でわかるように、最初の三角形が読み込まれます。私の追加アルゴリズムのいくつかは、すべての頂点のリストのみを必要とします。したがって、パフォーマンスを向上させるために、すべての三角形のすべての頂点が頂点リストに挿入され、アルゴリズムはリストのみを取得します。

だから私は三角形を持っているとしましょうT1(a,b,c)T2(d,e,f)およびT3(e,g,h)。頂点には then が含まれます[a,b,c,d,e,f,g,h]

あるアルゴリズムでは、頂点を別の頂点に置き換える必要があります。たとえば、eが削除され、 に置き換えられaます。

通常、更新された TrianglesT1(a,b,c)とを取得するには、次のコードを使用してこれをT2(d,a,f)行いT3(a,g,h)ます。

for (Triangle t : triangles) {
    for (int i=0; i<3; i++) {
        if (t.pos[i] == e)
            t.pos[i] = a;
    }
}

を指しているすべての参照を効率的に更新してe、参照の新しいターゲットが になるようにする別の方法はありますかa。たとえば、ループを使用してすべての三角形を反復処理する (これはあまり効率的ではありません) 代わりに、次のような呼び出しが役立ちます。

Java.updateReferences(e,a);

ありがとう

4

2 に答える 2

3

頂点クラスは単純に変更可能で、座標を変更するだけでよいように思えます。

e.setCoordinates(a.getCoordinates());

このようにして、 e へのすべての参照は新しい座標を自動的に取得します。これができない場合は、頂点オブジェクトをオブジェクトにラップしMutableVertex、三角形オブジェクトと頂点リストに のインスタンスを含める必要がありますMutableVertex

于 2012-10-28T17:45:45.463 に答える
0

その場で頂点を探す「スマートな」リスト実装を持つことができます。たとえば、

int size() { return 三角形.size() * 3; }

頂点 get(int i) {三角形を返す.get( i / 3 ).getVertex(i % 3); }

またはそれに沿った何か。java.util.AbstractList の拡張を検討してください。

于 2012-10-28T18:39:48.963 に答える