[解決済み] すべての文字が一意であるかどうかを判断するためのビットベクトルの使用方法を説明します。
質問
ビットベクターがどのように作用してこれを行うのか混乱しています(ビットベクターにはあまり慣れていません)。以下は、与えられたコードです。どなたか教えていただけませんか?
public static boolean isUniqueChars(String str) {
int checker = 0;
for (int i = 0; i < str.length(); ++i) {
int val = str.charAt(i) - 'a';
if ((checker & (1 << val)) > 0) return false;
checker |= (1 << val);
}
return true;
}
特に、何
checker
は何をしているのでしょうか?
解決方法は?
int checker
は、ここではビットのストレージとして使用されています。整数値の各ビットはフラグとして扱えるので、最終的には
int
はビット(フラグ)の配列です。コード中の各ビットは、そのビットのインデックスを持つ文字が文字列中に見つかったかどうかを示しています。同じ理由で、ビットベクトルも使えます。
int
. 両者の違いは2つあります。
-
サイズ .
int
は固定サイズで、通常は4バイト、つまり8*4=32ビット(フラグ)です。ビットベクタは通常、異なるサイズにすることができますし、コンストラクタでサイズを指定する必要があります。 -
API . ビットベクターを使えば、おそらく次のような読みやすいコードになるでしょう。
vector.SetFlag(4, true); // set flag at index 4 as true
について
int
の場合、下位のビットロジックコードになります。checker |= (1 << 5); // set flag at index 5 to true
また、おそらく
int
というのも、ビットを使った操作は非常に低レベルで、CPUがそのまま実行できるためです。BitVectorを使うと、暗号化されたコードを書く必要がなくなり、フラグをより多く格納できるようになります。
参考までに、ビットベクターはbitSetまたはbitArrayとも呼ばれます。このデータ構造について、さまざまな言語やプラットフォームでのリンクを紹介します。
関連
-
[解決済み] tempとは何ですか、またjavaにおけるtempの用途は何ですか?
-
[解決済み] Java Genericメソッドをstaticにするには?
-
[解決済み] なぜJPAには@Transientアノテーションがあるのですか?
-
[解決済み] java.util.MissingFormatArgumentException: 形式指定子 '%s' がありません。
-
[解決済み] JDBC タイプの方言マッピングがありません。1111
-
[解決済み] アニメーションGIFの表示
-
[解決済み] 文字列の巻き方
-
[解決済み] IntegerからBigIntegerへの変換
-
[解決済み] Javaでdoubleをfloatに変換する
-
[解決済み] ArrayListとVectorの違いは何ですか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] この配列の中の数字を入れ替えるには、何が足りないのでしょうか?ジャバ
-
[解決済み] XX:MaxDirectMemorySizeの既定値
-
[解決済み] javacが「using unchecked or unsafe operations」という警告を出す原因は何ですか?
-
[解決済み] java.util.MissingFormatArgumentException: 形式指定子 '%s' がありません。
-
[解決済み] 1行目2列目でBEGIN_ARRAYを期待したが、BEGIN_OBJECTだった。
-
[解決済み] JavaにおけるMouseListenerとMouseAdapterの違いについて
-
[解決済み] java.lang.ClassCastException: java.lang.Long を java.lang.Integer にキャストできない(java 1.6
-
[解決済み] 文字列の長さに応じて文字列をトリミングする
-
[解決済み] Spring ApplicationContext - リソースリーク: 'context' が閉じられない
-
[解決済み] IntegerからBigIntegerへの変換