1

簡単に言うと、さまざまな型 (int、double、String、byte など) の配列のリストが必要です。これで、指定されていない ArrayList オブジェクトで動作するようになりましたが、ArrayList から配列を取得するたびに、必要な配列の型に変換して((double[]) arraylist.get(j))[i]います。

しかし、私の心配は次のとおりです。これは何百回も繰り返されるプログラムであり、非常に非効率的で遅いと感じています。一定の変換を必要とするのではなく、参照のリストだけが必要です。そのため、代替案についてのご意見をいただければ幸いです。

4

2 に答える 2

6

実際の変換は行われず、実行時の型チェックのみが行われます。これを 1 秒間に数百回実行する必要があるだけであれば、大した問題にはならないはずですが、関係のないデータを保存すると、とにかく間違った角度から問題を攻撃しているように聞こえます (もちろん、私は間違っているかもしれませんが、私はこれが必要または優先される状況を考えることができません)。

于 2012-05-18T20:02:39.630 に答える
2

他のすべての人が言っているように、変換はありません-それは単なるキャストです。

ただし、このキャストを書きたくない場合は、これlistarrayをクラスでラップしてメソッドを提供できます。

public <T> T get(int indexOfArray, int indexInArray) {
    return (T) ((T[]) arraylist.get(indexOfArray))[indexInArray];
}

コード内で使用できるように:

MyClassWithArrayList l = new MyClassWithArrayList(...);
...
double d = l.get(1, 2);

もちろん、1インデックスの配列がdoubleタイプであることを完全に確認する必要があります(キャスト例外があります)

または、常にインデックスに double の配列があることがわかっている場合は、次のように1記述できます。

public interface AppConstants {
    public static final int DOUBLE_TABLE_INDEX = 1;
    ...

そして使用:

double d = l.get(AppConstants.DOUBLE_TABLE_INDEX, 2);
于 2012-05-18T20:10:24.640 に答える