做一个更好的实现修改ArrayList <hashmap <string,integer =“”>&gt; </hashmap <string,>

时间:2011-03-01 11:07:30

标签: java hashmap

我有一个hashmap列表。 一个字段是整数,另一个是布尔值,它会告诉我该项是否被选中。

最终目的是更改ArrayList,取消选择已选择的旧项目,并标记新项目。我制作了这段代码,但我想知道是否有更好的方法来实现它。

VisualizationBean visualizationBean = new VisualizationBean();
ArrayList<HashMap<Boolean, Integer>> resultsPerPage = visualizationBean.getResultsPerPage();
for (Iterator iterator = resultsPerPage.iterator(); iterator.hasNext();) {
  HashMap<Boolean, Integer> hashMap = (HashMap<Boolean, Integer>) iterator.next();
   if(hashMap.containsKey(true)){
     int beforeSelected = hashMap.get("true");
     hashMap.put(false, beforeSelected);
   }
   else{
    if(hashMap.get(false) == number){
      hashMap.put(true, number);
    }
  }
}

提前致谢

3 个答案:

答案 0 :(得分:5)

请不要使用地图列表来执行您正在执行的操作。

使用BitSet,它是为此目的而设计的。 (根据您的要求,您可能需要一个BitSet列表,但绝不需要地图列表,特别是从布尔到任何东西)。

或者你可以使用从整数到布尔的Map(不是从布尔到整数)。

答案 1 :(得分:1)

  1. 声明接口而不是具体类型,即使用ListMap而不是ArrayListHashMap
  2. "true"显然是错误的 - 需要true,因为前者是一个字符串,后者是Boolean
  3. 至于你的代码的逻辑,如果你更多/更好地解释你想要做什么,我会更容易评论。

    编辑:如果我理解您正在尝试做的事情,那么我建议你有一个新课程,例如SelectedItem有一个id和一个名为{{1}的方法}。然后,您会在isSelected()上调用类似getItems(boolean selected)getItems的方法。前者只给你那些被选中或未被选中的项目,后者会给你所有的项目,你必须遍历它们才能看到哪一项被选中,哪一项不被选中。这种类型的改变会使它感觉更加面向对象而不是处理数据结构。

    Edit2:或者,根据您的需要,选择@Sean Patrick Floyd提出的建议

答案 2 :(得分:0)

制作一个小助手类(简单代码)

class VisiblitySetting {
  public static int InvalidIndex = -1;
  public boolean IsSelectedNow;
  public boolean WasSelectedBefore;
  public int SelectionIndex;
}

ArrayList<int> wasselected = ...;
ArrayList<int> isnowselected = ...;
VisualizationBean visualizationBean = new VisualizationBean();
ArrayList<VisiblitySetting> resultsPerPage =  visualizationBean.getResultsPerPage();
for (Iterator iterator = resultsPerPage.iterator(); iterator.hasNext();) {
  VisiblitySetting vis = (VisiblitySetting) iterator.next();
  if(vis.IsSelectedNow){
   wasselected.add(vis.SelectionIndex);
   vis.IsSelected = false;
  }
  else if(vis.WasSelectedBefore){
   isnowselected.add(vis.SelectionIndex);
   vis.IsSelected = false;
  }
 }
}

但我可能会误解你的代码。使用像这样的哈希没有多大意义。