你可以做类似的事情
Map<Object.class, List<Object>>
或
Map<identifier, List<entries>>
然后在添加到地图时,只需检查地图中是否存在 Object.class,如果它确实获取列表并插入对象,否则在地图中插入一个新条目并将对象添加到列表中。请注意,此解决方案支持列表上的任何键和任何值类型,只要它不是原始类型(即使用原始类型的包装器)
额外的
使用数组意味着你从一开始就知道数组的长度,对于没有定义数组/列表长度的问题,最好使用 List/Map 等数据结构
在评论中指定的 Util 类
这个类包含一个私有地图,一种向地图添加值的方法,以及一种获取地图的方法,或者地图的二维数组版本。
public class UtilClass {
private Map<Object, List<Object>> map = new HashMap<>();
public void addMapEntry(Object key, Object data){
List<Object> list = new ArrayList<>();
if(map.containsKey(key)) {
list = map.get(key);
}
list.add(data);
map.put(key, list);
}
public Object[][] getMapAs2dArray(){
Object[][] array = new Object[map.keySet().size()][];
int index = 0;
for(Object key : map.keySet()){
array[index] = map.get(key).toArray();
index++;
}
return array;
}
public Map<Object, List<Object>> getMap() {
return map;
}
}
上面测试代码的主要方法
public static void main(String[] args){
UtilClass test = new UtilClass();
for(int i = 0; i < 10; i++){
test.addMapEntry("foo", "foo"+i);
test.addMapEntry("bar", "bar"+i);
}
for(Object key : test.getMap().keySet()){
System.out.println("Printing map");
System.out.println(key + " = " + test.getMap().get(key).toString());
}
Object[][] objects = test.getMapAs2dArray();
System.out.println("printing 2d Array");
System.out.println(Arrays.deepToString(objects));
System.out.print("Done");
}
主要测试方法的输出如下
打印地图
bar = [bar0, bar1, bar2, bar3, bar4, bar5, bar6, bar7, bar8, bar9]
打印地图
foo = [foo0, foo1, foo2, foo3, foo4, foo5, foo6, foo7, foo8, foo9]
打印二维数组
[[bar0, bar1, bar2, bar3, bar4, bar5, bar6, bar7, bar8, bar9], [foo0, foo1, foo2, foo3, foo4, foo5, foo6, foo7, foo8, foo9]]
完成
UtilClass 也可以静态定义为
public class UtilClass {
public static void addMapEntry(Object key, Map<Object, List<Object>> map, Object data){
List<Object> list = new ArrayList<>();
if(map.containsKey(key)) {
list = map.get(key);
}
list.add(data);
map.put(key, list);
}
public static Object[][] getMapAs2dArray(Map<Object, List<Object>> map){
Object[][] array = new Object[map.keySet().size()][];
int index = 0;
for(Object key : map.keySet()){
array[index] = map.get(key).toArray();
index++;
}
return array;
}
}
这样可以在不实例化类的情况下访问功能,如果您不希望为包含数据的地图制作包装器,可能会更好