自立Collections.sortは、比較の混乱結果を発見しましたか?鍋や強いターンのコンパレータタイプがにつながりますか?

最近、開発タスクの数は、多くの時間を持っているので、プロジェクトを検討する時間があります。

私は7頭の牛のクラウドプロジェクトは、オブジェクトストレージサービスを使用していることを懸念しています。

テストとしていくつかの写真をアップロードする必要がありますが、7頭の牛のコンソールコンテンツは日付やコンテンツの中でより多くのバケツとして、クエリをアップロードする時間によってソートすることができない、私は今日の記録をアップロードした写真を見ることができません。

コンソールの説明を見つけることが、次の行に、このような句を見て、と笑うターンで唖然ないか、与えられたコンソールのヘルプ文書を開きます。

そして、言葉による参照、このようなQ&Aなどsegmentfault、私たちは自分の力の強力なアルゴリズムを知っているか、何をしていない、とにかく、7頭の牛は確かに[速い]であるが、すべてのソートやフィルタリングサービスを提供することを拒否しました。

APIを含め、コンソールを含みます。

ショーの決意はどんな仕事をすることを拒否するための最良の性能に応じて、キーと値のストレージASCIIソートキーの使用、ので、これはロジックの一種でありますか?

 

Wordの迅速しばらく探したが、唯一のAPIのドメイン名を使用し、論理検証がトークンことを見つけるために、渡航文書APIにサーバー側のSDK魅力的な組み合わせを行ってきました。

最後に、私は下にバケツ内のすべてのファイルのリストを取得するためのAPIを使用することができます。(もちろん、唯一のキー文字で並べ替えること)

それ自身の行をソートしません。

アップロード時以来ユニット7頭の牛の記録は100 nsです。疑い長で表されません(飲酒は、それのメ​​モリの処理速度に一致するように、おそらく、以下の表のコレクションを入れ、10 000ミリ秒に分割されます)

直接(INT)o2.putTime返すように書き換え直接法と比較降順を開始するために - o1.putTimeを、結果はソートあべこべもたらします。

結果を比較のために習慣的類推数学記号の機能は、通常のソート結果を変更しようと、1/0 / -1を返しています。

私はパニック。ソース1/0 / -1ああの種類を判断しないような印象。少しをチェックアウト、または実際にそれがマージTimSortのソースコードであるかどうかだけの結果がメソッド<0と> = 0判断を比較します。

それから彼は質問のうち、その強力なターンを実現するために始めました。しかし、ときに強いlong int型int型への範囲を超えて、あなたは何が起こるかを推測しますか?0に?最初に私は本当にそれであるが、比較結果をソートするの混乱につながった多くのオブジェクトを、考える0原因と等しくなると思います。

実際には、誰もが感じするためのいくつかの例を置きます:

オリジナルlong794056495088強いトランスフェクトINT-512454672の
int58016938元long889116247210強いターン
オリジナルロング42421670980704強いトランスフェクトINT-278998112
オリジナルロング13603247092059強いトランスフェクトINT-1085665627
オリジナルロング42159956036917強いトランスフェクトINT-557059381の
元long1150831190997強いトランスフェクトINT-220044331
オリジナルの長期15560683307530強いターンINT-16794122
オリジナルロング10186805000959強いトランスフェクトint857425153
元long6059356417962強いトランスフェクトINT-842436694の
元long16453936148484強いトランスフェクトINT-83562492
int177704655元long631537897167強いターン
強いINT-25545554トランスフェクトオリジナルlong17343052395694
オリジナルロング9434266088448 int1777060864トランスフェクションし、強力な
オリジナルの長期3033381814強いですint1261585482回し
int294766775元long4651744348343強いターンを
元ロング13649116168272強いターンint289898416

驚くべきことに、0でないが、いくつかの強いが、元のシンボルを維持するために、ターンの後があり、負の他は逆転しました。

それは、強力なターンの原則について学ぶために時間です。

Javaは64ビット長で8バイトで、32 4バイトをint型。

強いlong int型スイッチの場合:値として下位32ビットに直接アクセスすることができますが、補完するものとして考えられて。

コンピュータでは、2の補数形式で格納された値は、正の数は、2の補数を示しています。ネガ型が否定プラスいずれかのバイナリ表現を補完する(符号ビット定数と呼ば又は、残りのビットの数は、+ 1反転します)。

負順番が、元のコード補完場合:シンボルビット定数を、残りのビットの数は、1 +反転。元のコードと同じステップの補数の負の回転は、3つのプロパティは、補体理解を容易に百科事典百度ここに記載されていますよ。

図1に示すように、負の整数(または元コード)およびその補数(または補体)を加え、そして鋳型の通りです。
図2に示すように、補整数が補完され、整数自体次いで、等しいです。
図3に示すように、正および負のゼロゼロ補数表現同じ。

例1:

オリジナルロング794056495088

長いバイナリ1011100011100001011101001000111111110000にオリジナル

11100001011101001000111111110000:低い(陰性結果)の補数とした32

残り一定の符号ビット、ビット反転+1:10011110100010110111000000010000

-512 454 672:符号付き10進数に変換

 

記号は変更されません後に、強力なターンを見て、そのようなことは二度多くの練習を覚えていないことができます。

例2:

オリジナルロング889116247210

長いバイナリ1100111100000011011101010100010010101010にオリジナル

00000011011101010100010010101010:下位32ビットの補数(正の数)としました

58016938:符号付き10進数に変換

 

したがって、元の長い低32個の数字は、その上に重要であるが、それらは、符号ビット処理によって強いターン後に、人(ああ、長いオリジナル符号桁と必ずしも同一ではない)を表す記号ではなく、高い確率が外に問題。

もちろん、治療後に我々は、その上にプログラムの原理を理解してください。好調な業績の裏をオンにしないでください、または自分自身を書くこと、またはLong.compare静的メソッドを使用します。

 

それが長いことになると、この問題は、包装とは何の関係もありませんが、また、私は、これらのラッパークラスロング思いました。

結論はあなたと共有するために、いくつかのテストコードを書きます:

ロングL1 = 12345リットル。
ロングL2 = 12345リットル。
ロングL3 = 1234リットル。
System.out.println(L1> L2)。
System.out.println(L1> = L2)。
System.out.println(L1 == L2)。
System.out.println();
System.out.println(L1> L3);
System.out.println(L1> = L3)。
System.out.println(L1 == L3)。

結果:





図1は、等価(==)比較のためにパッケージング場合、アドレスLongオブジェクトを比較すると、等しいか.longvalue比較値を使用することが可能です。

パッケージ、クラスよりも小さい場合に比較2は、(>、<、> =、<=)、比較が自動的にこのように直接十分ではなく、JVMを開梱しますより大きい含みます。

インクイジターは、障害を見つけることではなく、常識[ない]制約とより良いポジショニングの問題に。

 

最後に、完璧なのおかげで、未完成の感謝ので、私は毎日キャセロール、ほとんど進展を破る力を持っています。

 

参考文献:

https://developer.qiniu.com/kodo/kb/1336/upload-download-instructions

https://blog.csdn.net/gdhgr/article/details/79604250

https://baike.baidu.com/item/%E8%A1%A5%E7%A0%81/6854613?fr=aladdin

おすすめ

転載: www.cnblogs.com/feixuefubing/p/11725143.html