4

Point(x、y)オブジェクトの一般的な例を使用して、Java 1.4で構造体として使用する方法はありますか?構造体は包含オブジェクトの一部であるため、Pointオブジェクトに個別のメモリ割り当てがないという利点があります。ただし、それにアクセスするためのメンバー関数はまだあります。

答えはノーだと98%確信していますが、希望は永遠に湧きます...

内容/理由:このコードには、intおよびブール値である100,000以上のオブジェクト(合計メモリフットプリントの約12〜14%)があります。それがオブジェクト内のC#構造体である場合、オブジェクトの数が減ります。そして...0x40000000がブール値であるintにすることを検討しています。しかし、そのintのメンバーメソッドがあり、それが構造体として扱われる場合、それを処理するのははるかに簡単です。

4

3 に答える 3

2

Java には現在、同等の構造体はありませんが、将来のバージョンでは示唆されていると思います。Flyweight パターンをまだ見てください。探しているものかもしれませんhttp://en.wikipedia.org/wiki/Flyweight_pattern

于 2012-06-22T22:22:32.693 に答える
1

いいえ、Object一般的な「構造体」にはsを使用する必要があります。

ただし、のペアのような単純なデータ構造intの場合は、メモリを節約して速度を上げるために少し工夫を凝らすことができます。

int a = 9;
int b = 10;
long pair = (a << 32)|b;

これにより、の32ビットがにパックablongます。それらを抽出する方法は次のとおりです。

a = (int)(pair >> 32);
b = (int)pair;
于 2012-06-22T22:18:43.390 に答える
1

tskuzzyの答えへの追加:別の可能性はint xint yフィールドをPointクラスからポイント値を格納する必要があるクラスに持ち上げることです。

コメントに応じて編集:

できることの 1 つは、単一のポイント値を格納する必要がある各クラスにクラスを拡張させることPointです。Point論理的な is-a 関係はありませんが、単一のインターフェイスを介してオブジェクトにアクセスできます。ただし、これは、複数のポイント値を格納する必要があるクラスでは機能しません (私はそうは思いません)。

于 2012-06-22T22:21:26.070 に答える