我有一个 ArrayList
的 LinkedList
s(链表数组)。 LinkedList
s 包含整数 ( Integer
)。
private List<LinkedList> buckets;
buckets = new ArrayList<LinkedList>();
for (int i = 0; i < 10; i++) {
LinkedList<Integer> temp = new LinkedList<Integer>();
buckets.add(temp);
}
我稍后想从链表中删除项目(按照它们添加的顺序)并将它们添加到数组列表中。当我尝试这个时:
ArrayList<Integer> sorted = new ArrayList<Integer>(unsorted.size());
for (int i = 0; i < buckets.size(); i++) {
for (int j = 0; j < buckets.get(i).size(); j++) {
sorted.add(buckets.get(j).removeLast());
// sorted.add((Integer)buckets.get(j).removeLast());
}
}
我收到一条错误消息:
add(java.lang.Integer) in ArrayList cannot be applied to (java.lang.Object)
但是当我将它转换为 Integer
时(注释掉的那一行),数组里全是null values
.有人看到我做错了什么吗?
这是我向 bucket
添加项目的地方:
for (int i = 0; i < unsorted.size(); i++) {
int digit = (unsorted.get(i) / position) % 10;
buckets.get(digit).add(unsorted.get(i));
}
请注意 sorted
是一个 ArrayList<Integer>
.当我在 Debug模式下跟踪它时,我可以看到 LinkedLists 具有具有正确值的 Integer 对象。
存储桶内容的屏幕截图:
工作示例:
class Ideone {
private static List<LinkedList<Integer>> buckets;
public static void main (String[] args) throws Exception {
ArrayList<Integer> arr = new ArrayList<Integer>();
arr.add(6);
arr.add(8);
arr.add(1);
arr.add(3);
arr.add(9);
System.out.println(arr);
arr = sort(arr);
System.out.println(arr);
}
public static ArrayList<Integer> sort(ArrayList<Integer> unsorted) {
buckets = new ArrayList<LinkedList<Integer>>();
for (int i = 0; i < 10; i++) {
LinkedList<Integer> temp = new LinkedList<Integer>();
buckets.add(temp);
}
ArrayList<Integer> sorted = new ArrayList<Integer>(unsorted.size());
for (int i = 0; i < unsorted.size(); i++) {
int digit = unsorted.get(i) % 10;
buckets.get(digit).add(unsorted.get(i));
}
for (int i = 0; i < buckets.size(); i++) {
for (int j = 0; j < buckets.get(i).size(); j++) {
sorted.add(buckets.get(j).poll());
// sorted.add((Integer)buckets.get(j).removeLast());
}
}
return sorted;
}
}
最佳答案
您在这里使用的是 LinkedList
的原始形式:
private List<LinkedList> buckets;
因此,removeLast
将返回 Object
,而不是 Integer
。尝试
private List<LinkedList<Integer>> buckets;
和
buckets = new ArrayList<LinkedList<Integer>>();
将 removeLast
的返回值强制转换为 Integer
是让它工作的前泛型方法。但是,您从未在每个 LinkedList
中插入任何项目,因此 removeLast
返回 null
。如果你想要返回一些东西,首先将一些东西插入到每个插入到 buckets
中的 LinkedList
中。
转换为 Integer
仍然有效,但是提供 Integer
作为 LinkedList
的类型参数是首选,特别是因为您正在使用泛型已经提供 LinkedList
作为 List
的类型参数。
关于java - 将整数添加到 ArrayList<Integer>,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26854034/