【问题标题】:Complex Hashmap ArrayList Generator复杂的 Hashmap ArrayList 生成器
【发布时间】:2015-05-27 20:44:18
【问题描述】:

这里有一些代码:

ArrayList<String> List = new ArrayList<>();
Map<String, List<String> > map  = new HashMap<String, List<String>>();

List.add("stringA");
List.add("stringB");
List.add("stringC");

for(int i = 0; i<List.size();i++){
            String key = List.get(i);
            List<String> value = new ArrayList<String>();
            map.put(key, value);
        }

此代码获取 ArrayList 中的任何内容,循环遍历它,将其添加到 Map,然后创建一个空的 ArrayList,其中每个字符串名称作为变量名称。现在,这可行,但有一个问题,除非我忽略了某些东西。在某些时候,我需要访问地图中新的空 ArrayList。但是,如果不将它们打印出来,我不会知道这些 ArrayList 的标题是什么,我不想这样做。基本上,我想我需要一个映射方法或类,然后是一个额外的映射键方法或类。我不确定如何实现它,但可能是这样的:

public class MapKey {
public MapKey(int count, String header){

    }
}

Map<MapKey, List<String> > map  = new HashMap<MapKey, List<String>>();

我考虑过的另一个选项是以某种方式循环遍历地图数组并将字符串添加到每个 ArrayList,但我对地图和循环遍历它们非常陌生。尤其是那些包含 ArrayLists 作为其值的。

【问题讨论】:

  • “在某些时候我需要访问 [这些] ArrayLists ...在地图中。...我不知道这些 ArrayLists 的标题是什么...”不清楚对我来说,您是想访问特定的 ArrayList(如果不知道 map 键就无法完成),还是想遍历整个地图并执行一些统一的操作,在这种情况下,我想向您介绍 @987654321 @ 和 Map.entrySet().
  • 您可以根据键名进行检索。 Set&lt;String&gt; keys = map.keySet(),获取值,ArrayList&lt;String&gt; value = map.get(key);
  • @dcsohl 我在地图之外有单独的 ArrayList,它们被分成不同的类别。然后我需要遍历这些外部 ArrayLists 并将它们合并到地图内的 ArrayLists 中。例如,假设我有ArrayList&lt;String&gt; vars1,它与地图内第一个 ArrayList 的名称是分开的。然后我需要遍历vars1 并将其添加到地图中的第一个 ArrayList 中,然后为另一个 ArrayList 再次执行此操作,但这次将其放在地图中的第二个中,依此类推。
  • @GD 检查我的答案,我添加了您关于通过外部 ArrayList 对象循环的新请求..

标签: java arraylist hashmap indexof


【解决方案1】:

有多种方法可以访问 HashMap 的键和值:

for (Map.Entry<String,ArrayList<String>> entry : map.entrySet()) {
  String key = entry.getKey();
  ArrayList<String> value = entry.getValue();
  // do your work
}

Set<String> keys = map.keySet();
for(String key : keys){
    ArrayList<String> value = map.get(key);
}

阅读java HashMap apiJava HashMap Link

编辑: 当您将其所有元素添加到另一个对象时,您不需要循环遍历您的 outside ArrayList 对象,只需调用 addAll(),它会将数组列表的所有元素附加到另一个对象。

ArrayList<String> aList = map.get("stringA");

假设您的第一个外部 ArrayList 称为 outListOne;

aList.addAll(outListOne);

附加到相应的列表:

   //assume number of outside lists are equal to number of map elements
    String[] keysArr = {"stringA", "stringB", "stringC"};
    ArrayList[] outLists = {outListOne, outListTwo, outListThree};

    // adds outside lists to corresponding map ArrayList lists
    for(int i = 0; i < keysArr.length; i++){
        list = map.get(keysArr[i]);  // you ArrayList in a map, get it by key name
        list.addAll(outLists[i]);  // append elements from out list to corresponding list
    }

【讨论】:

  • 我需要outListOne 仅将其所有元素附加到哈希图集中的第一个数组。然后我需要outListTwo 将其所有元素仅附加到哈希图中的第二个数组,依此类推。我习惯于使用索引对数组执行此操作,但由于没有索引,这让我感到困惑。
  • 你太棒了。谢谢您的帮助。对不起,愚蠢的问题。
【解决方案2】:

不完全确定“这些 ArrayList 的标题”是什么意思。但这里有一些代码 sn-ps 可能会让您更好地了解如何使用您的地图:

// add string x to the list for "stringA"
map.get("stringA").add(x);

// print all the values in the list for "stringC"
for (String s: map.get("stringC")) {
  System.out.println(s);
}

// print the names of the lists that contain "xyzzy"
for (String key: map.keySet()) {
  if (map.get(key).contains("xyzzy")) {
    System.out.println(key);
  }
}

// remove "foo" wherever it appears in any of the lists
for (List<String> list: map.values()) {
  while (list.remove("foo")){}
}

【讨论】:

    猜你喜欢
    • 2021-04-17
    • 2019-11-04
    • 2019-11-13
    • 2012-05-16
    • 2015-10-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-08-14
    相关资源
    最近更新 更多