3

誰でもこのコードを説明してもらえますか?私はコーディングの経験があまりないCollectionsので、これらの LOC を理解するのに苦労しています。

String[] stringList ={"1","2","1","1","2","3","2","3","2","1"}; 
List<String> al =Arrays.asList(stringList); 
Set<String> uniqueList = new HashSet<String>(al); 
for (String strCount :uniqueList) { 
     System.out.println(strCount + ": " + Collections.frequency(al, strCount)); 
} 

uniquelistのすべてのメンバーがあるのに、このループが 3 回しか実行されないのはなぜですかstringList。ループを 10 回 (の長さuniqueList) 実行するべきではありませんか?

4

5 に答える 5

12

には 3 つの異なる値しかないため、 for ループは 3 回しか実行されませんstringList

ASetは重複エントリーを許可しません。はSetエントリを でチェックします。.equals()これはtrue、2 つの重複するエントリに対するものです。uniqueListしたがって、 には 、 、 の3 つ"1"の要素しかありませ"2""3"

"2".equals("2")であることに注意してくださいtrue

javadoc の最も重要な部分は次のとおりです。

重複する要素を含まないコレクション。より正式には、セットには要素のペアe1e2そのようなものは含まれずe1.equals(e2)、最大でも 1 つの null 要素が含まれます。

于 2012-10-12T08:24:33.950 に答える
7

ASetは、Collection重複する要素を含まない です。配列には一意の要素として 1、2、3 しか含まれていないため、Set には 3 つの要素しか含まれません。

このドキュメントリンクを確認してください。

于 2012-10-12T08:25:16.573 に答える
4

「uniquelist」に「StringList」のすべてのメンバーがあるのに、このループが 3 回しか実行されない理由

いいえ、そうではありません

a の一般的なMathematical定義を使用するSet場合、Setunique値のコレクションです。重複することはできません。

同じことがJavaでも(実際にはどこでも)続くため、Listをaに変換するとSet、すべてのDuplicate値はfiltered out. 値のみuniqueが保持されます。

于 2012-10-12T08:28:07.227 に答える
4

Java仕様によると:

HashSet 実装にメソッドを追加します。

public boolean add(E e)

指定された要素がまだ存在しない場合は、このセットに追加します。より正式には、このセットに (e==null ? e2==null : e.equals(e2)) となる要素 e2 が含まれていない場合、指定された要素 e をこのセットに追加します。このセットにすでに要素が含まれている場合、呼び出しはセットを変更せずに false を返します。

于 2012-10-12T08:28:57.827 に答える
4
Set<String> uniqueList = new HashSet<String>(al); 

asSetは重複を許可しないため、このステートメントを実行する とuniqueList、要素"1""2"およびが含まれます"3"

于 2012-10-12T08:36:37.413 に答える