2

重複を含む可能性のあるリスト (以下のようなもの) を考えると、各 (キーワード) の一意の要素数をカウントできる必要があります。

List<String> list = new ArrayList<String>();
Set<String> set = new HashSet<String>();
list.add("M1");
list.add("M1");
list.add("M2");
list.add("M3");

set.addAll(list);
System.out.println(set.size());

リストから一意の各要素の数を取得するにはどうすればよいですか? つまり、List(list) に含まれる「M1」の数、「M2」の数などを知りたいということです。

The result should be the following:
2 M1
1 M2
1 M3
4

5 に答える 5

5

探しているのはMap<String, Integer>データ構造であり、ではありませんSet

何かのようなもの

for(iterating over something){ 
    Integer count =map.get(value); 
    if( count == null){
          map.put(value, 1);


    } else{
        count++;
        map.put(value, count);
    }

}

Map は value に一意にマップするデータ構造です

于 2013-08-07T05:01:48.637 に答える
2

Setこの場合は役に立ちません。マップが必要です。

List<String> list = new ArrayList<String>();
Set<String> set = new HashSet<String>();
list.add("M1");
list.add("M1");
list.add("M2");
list.add("M3");

// ...

Map<String, Integer> counts = new HashMap<String, Integer>();
for(String element: list) {
    int currentCount;
    if(counts.contains(element)) {
        currentCount = counts.get(element) + 1;
    } else {
        currentCount = 1;
    }
    counts.put(element, currentCount);
}

// ...

for(String element: counts.keySet()) {
    System.out.println("element: " + element + ", times appeared: " + counts.get(element));
}
于 2013-08-07T05:06:38.087 に答える
2

私はあなたがこのようなものを探していると思います (私はそれをコンパイルしませんでしたが、正しい方向に進むはずです):

List<String> list = ArrayList<>();
Map<String, Integer> counts = new HashMap<>();
// Fill list with values....

for (String item:list) {
    Integer count = counts.get(item);
    if (count == null) {
        // This is the first time we have seen item, so the count should be one.
        count = 1;
    } else {
        // Increment the count by one.
        count = count + 1;
    }
    counts.put(item, count);
}

// Print them all out.
for (Entry<String, Integer> entry : counts.entrySet()) {
    System.out.println(entry.getValue() + " " + entry.getKey());
}
于 2013-08-07T05:11:17.723 に答える
0

つまり、List(list) に含まれる "M1" の数、"M2" の数を知りたい場合は、 setインターフェイスを使用する代わりに、 Mapインターフェイスを使用できます。Map にはキー、値のペア形式、つまり Map データ構造が含まれているためです。

 Map<key,Value>
于 2013-08-07T05:11:34.337 に答える
0

はるかに簡単な方法:使用Collections.frequency()

System.out.println("M2: "+Collections.frequency(list,"M2");

出力します

M2: 1

于 2013-08-07T05:39:50.807 に答える