【发布时间】:2015-01-07 08:39:41
【问题描述】:
我有一个ArrayList 的LinkedLists(链表数组)。 LinkedLists 包含整数 (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>。当我在调试模式下跟踪它时,我可以看到 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;
}
}
【问题讨论】:
-
如果您将
buckets声明为List<LinkedList<Integer>> buckets,这将起作用。使用List<List<Integer>> buckets会更好。 -
谢谢,我已经这样做了,它修复了错误,但我仍然得到空值。
-
请重新阅读mcve 链接和协议。您不应该在此处发布链接,而是在您的问题中发布实际工作代码。
-
知道了,从现在开始我会这样做。谢谢。
标签: java arrays object arraylist linked-list