复杂哈希图 ArrayList 生成器

Complex Hashmap ArrayList Generator

这是一些代码:

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 的标题是什么,这是我不想做的。基本上,我想我需要一个映射方法或 class,然后是一个额外的映射键方法或 class。我不确定如何实现它,但可能是这样的:

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

    }
}

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

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

有多种方法可以访问 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 api Java HashMap Link

编辑: 当您将 ArrayList 的所有元素添加到另一个对象时,您不需要遍历 outside ArrayList 对象,只需简单地调用 addAll(),它就会将 arraylist 的所有元素附加到另一个对象。

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
    }

不太确定您所说的 "titles of these ArrayLists." 是什么意思,但这里有一些代码片段可能会让您更好地了解如何使用您的地图:

// 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")){}
}