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中的特定行添加元素
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 ()
方法将不会填充空值。