これらの関数はどちらもLongをバイナリ文字列に変換しますが、もう一方は他よりも最適化されていますか?私は、Longクラスのソースコードを見て、これらの2つの静的メソッドは異なる実装を持っています。Long.toBinaryString()とLong.toString(num、2)の違いは?
答えて
答えはテストを行うだけで、取得するのは簡単です:私は、私は(ラズベリーパイ)でこれをテストしたシステムで
class Test {
public static void main (String args[]) {
long millisStart = System.currentTimeMillis();
for(int i = 0; i < 1000000; i++) {
String s = Long.toBinaryString(i/10000);
}
System.out.println(System.currentTimeMillis() - millisStart);
millisStart = System.currentTimeMillis();
for(int i = 0; i < 1000000; i++) {
String st = Long.toString(i/10000, 2);
}
System.out.println(System.currentTimeMillis() - millisStart);
}
}
を、これがそう3279.
に対して655になります次のように推測してください。long.toString(num、2);遅いです。それは柔軟でなければならないので、不思議ではありません。
(私はdownvoterではありませんが、*適切な*ベンチマークは同様の結論になるでしょう)、与えられたフォームのベンチマークは決して信頼できません**。 – Marco13
適切なベンチマークではありませんでした。しかし、差異の大きさと、特定の機能の専門化とを組み合わせると、「もう一方よりも最適化されていますか?」という明確な答えが得られます。 –
Florianテストに感謝します。誰かがソースコードを見て、toBinaryStringがより最適化されている理由を説明できるかどうかを調べたいと思っています。 (私はdownvoter btwではない) – user2603017
- 1. `num num [7]`を指定すると、 `num`、`&num [0] `、`&num`はどのように違いますか?
- 2. anglejsの#num、[(ngModel)] = "num"と[value] = "num"の選択肢2
- 3. のPython - バイナリにnumとnum個のバイナリ - 間違った出力
- 4. while(cin)とwhile(cin >> num)の違いは何ですか?
- 5. Cのポインタ:cell =&numは* cell = numと等価ですか?
- 6. Python層を使用しているときにCaffe BLOBの `num`と` count`パラメータの違いは何ですか?
- 7. Pythonの "2 * 2"と "2 ** 2"の違いは何ですか?
- 8. Long.toBinaryStringが827.0の期待バイナリ文字列を返さない
- 9. 休止@ManyToOneと@OneToManyは(レコードのNUM)
- 10. num条件に基づいてnumのリストを返します
- 11. 2回の違いは?
- 12. iOSの違いは2回
- 13. + = 2とa = a + 2の実行の違いは?
- 14. C#のmyArray.GetValue(2)とmyArray [2]の違いは何ですか?
- 15. PythonのNUM =ループ
- 16. Console.Write(5/2)とConsole.Write(5.0/2)の違いは何ですか?
- 17. ハスケルでは、num to num変換関数 `toNum ::(Num a、Num b)=> a - > b`を書く良い方法がありますか?
- 18. エリクサー、num = [9]、numは '\ t'に割り当てられます。
- 19. MVCと.NET 2の形式の違い
- 20. 角度2のマットとmdの違い
- 21. 2つのディクショナリの交点と違い
- 22. Play FrameworkのSilhouetteとDeadbolt 2の違い
- 23. とValueError:numがある必要があり、1 <= NUM <= 2ではなく3
- 24. 違い2つの
- 25. Swift 2とLinux/OS Xの違い
- 26. zend framework 2サービスマネージャーinvokablesとファクトリの違い
- 27. MVC 2とMVC 3の違い
- 28. glkView:drawInRect:とglkViewControllerUpdate:の違いOpenGL ES 2 - iOS
- 29. Androidでカメラとカメラ2の違い
- 30. QlikViewを - テキストオブジェクトのNUM
'toBinaryString'がタスクに最適化されていないと、私はショックを受けます。 – 4castle
toStringは剰余と除算を使用して桁を作成しますが、toBinaryStringは右シフトを使用します。しかし、私は、コンパイラが2を使って除算を最適化するかどうかと、残りの2つをシフトを使って最適化するかどうかはわかりません。だから私は本当に大きな違いがあるかどうかは分かりません。コンパイラの最適化が行われていれば、それらはかなり似ていると思っています。ちょうど私の思考は、それが本当であるかどうか確かではありません。 –
JMH/JIT分析ではなく、いくつかのMicrobenchmarkingプラクティスを遵守したクイックベンチマークから、変換の "コア"ループ(数字を 'char'バッファに書き込む)は〜25%一般的な 'toString'メソッドの方が遅くなります。 **しかし、**かなりのオーバーヘッドは、 'toString'メソッドで文字列を作成するときに、' char'配列の関連部分を*コピー*する必要があるという事実に起因します。 'toBinaryString'では、必要な文字の数が*直接*計算され、結果の' char'配列は*コピーされずに文字列*に渡されます。 – Marco13