1

私はアイテムのリストを処理する Java プロジェクトに取り組んでおり、各アイテムには int 型の ID と String 型の値があります。次に、内部的にリストを持ち、アイテムを追加、削除、取得するメソッドを公開する ItemCollection という別のタイプがあります。

アプリケーションは金融取引ゲートウェイであるため、アプリケーションは毎秒多くのトランザクションを受け取るため、パフォーマンスに重点を置いています。私の質問は:

String を Integer、Char、Date などの別の型に変換するコストは、Integer、Char、Date などを含むオブジェクトを変換するコストと同じですか?

明確にするために、現在、アイテムの値は文字列形式で処理されます。アイテムには、アイテムの値を文字列で返す getValue() というメソッドがあります。ただし、この値を int などの別の型に変換する必要がある場合があります。そこで、値のルート タイプを Object に変更し、値が Object から Object に変換される getString()、getInt()、getDate()、getChar() などのメソッドを公開することを計画しています。特定のデータ型。もちろん、値を変換できない場合は null/zero/etc が返されます。

あなたの経験では、どのようなアプローチが最善でしょうか? Object から int への変換は、String から int への変換と同じですか?

4

4 に答える 4

0

私よりも優れたパフォーマンスが必要な場合は、のような低水準言語を使用する方がはるかに良いことをお勧めしますC++。のような関数型言語を使用するのが適切かもしれませんErlang。Javaを使用する場合は、タグ付き型を避け、言語が提供する型システムを使用する必要があります。タグ付きクラスは、実際のJavaクラスよりもそれほど高速ではありません。タグ付きクラスは、Javaの古いプログラミングスタイルです。Stringたとえば、に変換する必要がある場合Date、この操作はオペレーターによって実行されるキャストよりもはるかに遅くなりますinstanceof。また、JavaにはStop the worldGCの一時停止があり、リアルタイムアプリケーションにとっては致命的となる可能性があります。

于 2012-08-02T22:08:57.337 に答える
0

あなたが提供した詳細のレベルに基づいて、私の提案は次のとおりです。.

Java の型システムを使用してデータをモデル化する方法を見つけてください。型変換 (例: String から Integer) を避け、型キャスト (例: (String)someObject) を避けます。

特定の操作 (整数関数など) について質問がある場合はtoString、ドキュメントまたはソース コードを参照することをお勧めします。

于 2012-08-02T22:06:33.423 に答える
0

これは、「変換」の意味によって異なります。これは Java の正確な専門用語ではありません。

「キャスト」を意味する場合、答えはキャストが速いということです。クラスItemCollectionには、次のようなメソッドがある場合があります。

public int getInt(int index) {
    Object value = getObject(index);
    return (Integer)value;
}

キャストは、いくつかのマシン命令を追加します。

「解析」のようなものを意味する場合、その答えは、解析はキャストよりも数百倍または数千倍遅くなりますが、I/O と比較すると高速です。解析していた場合、コードは次のようになります。

public int getInt(int index) {
    String value = getString(index);
    return Integer.parseInt(value);
}

では、「変換」とは正確には何を意味するのでしょうか。

于 2012-08-03T14:10:23.467 に答える
0

これらのオブジェクトを作成しているのは誰ですか? 実際にデータを実際の型にマーシャリングできる JSON や XML などの形式でデータが送られてくるのではないでしょうか?

たとえば、次のような JSON メッセージを受け取った場合:

date: 2012-12-25
acct: 12345
amount: 123.50

次に、それらを正しいタイプに入れる必要があるのはその時点です。

タイプに基づいてメッセージをディスパッチしたり、アイテムに対してアクションを実行したりしたいようで、タイプを使用してそれらを変換しようとしています。あなたの質問に答えたくないのですが、これをどのように達成したいと考えていますか? 最初に項目が日付かどうかを確認しますか? そうでない場合は、それが数字かどうかを確認してみてください。何が優先されますか?

処理が必要ながあり、Item(前に述べたように、入力データを文字列ではなく別の型にマーシャリングすることによって) と を取得StringItemできるDateItem場合、たとえば、Visitor パターンを使用できます。

于 2012-08-02T22:18:32.730 に答える