如何放置和获取地图<人,地图<列表<string =“”>,整数&gt;&gt;人在java中缓存?</person,>

时间:2014-11-26 20:17:48

标签: java arraylist map hashmap

我需要设置一个本地groupCache和personCache。

我们的前任已将它们定义为:

        private Map<List<String>, Integer> groupCache;
        private Map<Person, Map<List<String>, Integer>> personCache;

所以在我宣布之后:

    Map<List<String>,Integer> groupCache = new HashMap<List<String>,Integer>();
         Map<List<String>, Map<List<String>,Integer> > personCache = new HashMap ....

我无法将数据映射到groupCache,更不用说构建personCache

注意HashMap有两个“层”。在外层,Person是一个类。

所以我可能有一堆Person对象,例如person1,person2,person3 ......(人员数量不固定)。每个人都像是一个拥有5个0-组的领导者?每个组中的成员。

在内层,我最初将Group作为一个类。有五个小组,比如group1,group2 ......

为简单起见,我不使用Group作为类,而是使用String列表。所以List strList具有“A”,“B”,“C”,“D”,“E”。 (目前组的数量是固定的)

例如,我已经建立了:

    List<String> strList = new ArrayList<String>(5);

    strList.add("A");
    strList.add("B");
    strList.add("C");
    strList.add("D");
    strList.add("E");

对于每个组,我需要将组的大小显示为int。比如group1或“A”中有5个人,group2有3个人...

我有一个整数数组设置来计算成员数:

     int[] intArr = { 5, 3, 2, 4, 4};

但我已将其转换为名为intList的列表:

    List<Integer> intList = new ArrayList<Integer>();
    for (int index = 0; index < intArr.length; index++)
    {
        intList.add(intArr[index]);
    }

我尝试了几种方法,例如:

     for (Integer number : intList) 
        for (String str : strList)
                groupCache.put(str, intList);

但它不起作用。

有人可以帮助澄清如何

(1)。在我的例子中使用groupCache.put(...)创建groupCache然后perosnCache?

注意:成员数量一直在变化 - 在一个组中添加或减少一个新成员。

项目的另一部分已经有了一种更新表格的机制,以跟踪组中新成员的最新数量。

因此,每次有更新时,程序都会触发一个事件。我收到一个带有Person对象的事件并打开该人以查看他/她下的哪些组的成员数增加或减少。

所以我需要让HashMap在本地跟踪这些数字数组,并且需要尽可能频繁地更新我的数组列表。

(2)。我如何使用groupCache.get(...)来比较现有的成员数和新的成员数呢?

(3)。使用上面的增强型for循环缺少什么?

太多了!

[编辑]唉!经过一些挖掘,看起来我需要的是将初始设置更改为Map&gt; personCache

[编辑2] 我怎么意识到我可以这样定义它:

 private List<Integer> groupCache;
 groupCache = new ArrayList<Integer>(); 


  private Map<Person, List<Integer>> personCache;
  personCache = new HashMap<String, List<Integer>>();

现在我可以用这种方式设置group1,如果我必须手动完成:

        groupCache.set(0, 5);
        groupCache.set(0, 5);

我正在以这种方式为person1设置所有五个组,依此类推,

    personCache.put(person1, groupCache);

所以我使用上面的设置将方法addPerson()放在一起没有问题。

问题:我是否从一个人中删除了一个人或一个团体?

我尝试过groupCache.clear()或.remove(...)。但不确定如何有条不紊地删除所有元素。

我需要设置removePerson()方法。

见下文:

  public void removePerson(Person oldPerson) {
    if (personCache == null) 
        personCache = new HashMap<Unit, List<Integer>>();

        if (personCache.containsKey(oldPerson)) {
        .....
               }
            groupCache.clear();
            groupCache.remove(oldPerson);

            }

0 个答案:

没有答案