-1

I was doing a research let say I have below array list

    List list=new ArrayList();
      list.add(1);
      list.add(1);
      list.add(2);
      list.add(3);
      list.add(3);

Now as I can see the elements repeated in the list are 1 and 3 , now I want to create hashMap

Map hm = new HashMap();

and now in this HashMap I want key should be 1 and 3 and values should be 2 and 2 that is key 1 should have value 2 and key 3 should have value 2 that is the number of times is repeated is should be the value and the element that is repeated is to be stored as key Please advise how to achieve this..!

4

3 に答える 3

3

リストを単純にループして、次のようにすることができます。

  • アイテムがマップにない場合は、値 = 1 で作成します
  • アイテムがすでにマップにある場合は、値を取得し、インクリメントしてインクリメントし、マップに戻します

ps:ジェネリックを使用することをお勧めします。

List<Integer> list = new ArrayList<Integer> ();

Map<Integer, Integer> hm = new HashMap<Integer, Integer> ();
于 2012-08-04T17:27:43.793 に答える
2

GuavaMultisetのような が必要なようです。例えば:

Multiset<Integer> multiset = HashMultiset.create(list);

次に、次のように呼び出すことができますcount

System.out.println(multiset.count(1)); // 2
System.out.println(multiset.count(2)); // 1
System.out.println(multiset.count(3)); // 2

Map確かに、それは実装されていませんが、必要なすべてのことを行っていると思います。

于 2012-08-04T17:38:21.473 に答える
0

Something like this:

Map<Integer, Integer> hm = new HashMap<Integer, Integer>();

for (int i = 0; i < list.size(); ++i)
{
    // get a number from the list
    int number = list.get(i);

    // get the value linked to the key
    Integer mapval = hm.get(number);
    if (mapval == null)
    {
        // the value returned is null, which means that the key isn't in the map
        // the key wasn't found yet, so the number is zero times in it
        mapval = 0;
    }
    // increase the number of times the number occurs.
    hm.put(number, mapval + 1);
}
于 2012-08-04T17:30:39.227 に答える