-1

我正在做一项研究,假设我有以下数组列表

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

现在我可以看到列表中重复的元素是 1 和 3 ,现在我想创建 hashMap

Map hm = new HashMap();

现在在这个 HashMap 中,我希望键应该是 1 和 3,值应该是 2 和 2,即键 1 应该有值 2,键 3 应该有值 2,即重复的次数应该是值和重复的元素将被存储为键请告知如何实现这一点..!

4

3 回答 3

3

您可以简单地遍历列表并:

  • 如果该项目不在地图中,则使用 value = 1 创建它
  • 如果该项目已经在地图中,则获取该值,将其递增并将其放回地图中

ps:使用泛型是个好习惯:

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

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

听起来你想要一个Multiset,比如Guava中的那个。例如:

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

像这样的东西:

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 回答