向ArrayList添加元素<ArrayList<Integer>>

问题描述 投票:0回答:1
class solution{
    public List<List<Integer>> solve(int[] nums) 
    {
        List<List<Integer>> ans = new ArrayList<List<Integer>>();
        HashMap<Integer, Integer> hm = new HashMap<>();
        for(int i = 0; i<nums.length; i++){
            if(hm.containsKey(nums[i])){
                hm.put(nums[i], hm.get(nums[i])+1);
            }
            else{
                hm.put(nums[i], 1);
            }
            if(ans.size()<hm.get(nums[i])){
                ans.add(new ArrayList<Integer>());
            }
            int row = hm.get(nums[i]) - 1;
            int el = nums[i];
            ans.add(row, el); //Line 18: error: incompatible types: int cannot be converted to List<Integer>
        }
        return ans;
    }
}

当尝试将元素添加到 ArrayList> 时,我得到了

不兼容的类型:int无法转换为List

我使用了语法 obj.add(row, element);

如何在ArrayList中的特定行添加元素>?

java arraylist
1个回答
0
投票

A

List<List<Foo>>
被视为二维 (2D)
List
。假设你有

List<List<Foo>> myList = = new ArrayList<> ();

在代码的后面,假设元素实际上存在,为了访问特定的

Foo
,使用两个下标:

Foo myFoo = myList.get(12).get(7);

这相当于:

List<Foo> row = myList.get(12); // returns a `List<Foo>`
Foo myFoo = row.get(7);

如果元素存在,并且您想在特定位置添加一个,您也可以使用两个下标:

myList.get(15).add (20,newFoo (482));

如果

myList.get(15)
不存在,您可以创建它:

List<Foo> line = new List<> ();
for (int i = 0; i < 21; i++) {
   line.add (new Foo (i));
}
myList.add (15, line);

创建和填充 2D

List
的一般方法是一次创建一行,完成后添加每一行:

List<List<Foo>> myList = new <> ArrayList<> ();
int outerSize,  innerSize;
...
for (int outer = 0; outer < outerSize; outer++) {
   List<Foo> line = new ArrayList<> ();
   innersize = getInner (outer);
   for (int inner = 0; i < innerSize; inner++) {
       line.add (new Foo (outer, inner);
   }
   myList.add (line);
}

注意事项

  • 在您的代码中,由于您使用

    <Integer>
    作为内部类型,因此不必在使用
    new
    的地方使用
    new Foo
    。编译器将使用自动装箱和拆箱。

  • 向带有索引的

    List
    添加元素时,索引的值必须大于或等于 0,并且小于或等于
    size()
    的当前
    List
    。如果索引值大于
    add (int index, E e)
    ,则 size () 方法将
    不会
    填充空值。

© www.soinside.com 2019 - 2024. All rights reserved.