关于列表和地图

时间:2012-08-04 17:24:02

标签: java list collections hashmap

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

    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,即重复的次数应该是值和重复的元素将被存储为密钥请告知如何实现这一点..!

3 个答案:

答案 0 :(得分:3)

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

  • 如果项目不在地图中,请使用value = 1
  • 创建
  • 如果项目已经在地图中,请获取值,增加值并将其重新放回地图

ps:使用泛型是一种好习惯:

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

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

答案 1 :(得分:2)

听起来你想要Multiset,例如Guava中的{{3}}。例如:

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 - 但我怀疑它会做你需要的一切。

答案 2 :(得分: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);
}