java - 将整数添加到 ArrayList<Integer>

标签 java arrays object arraylist linked-list

我有一个 ArrayListLinkedList 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 对象。

存储桶内容的屏幕截图:

Bucket contents debug output

工作示例:

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/

相关文章:

c - 数组符号与指针符号C

Javascript:消失的对象属性

java - 简化复杂的三元条件

java - Crypto JS AES-128 密码 - 等效的 Javascript 代码

java - 从 dozer-mapping.xml 读取 <mappings> 时 SaxParser Eception

java - 如何在二维数组中每列的正下方打印列总计

java - PdfPTables[] 数组填充时出现空指针异常

java - java 1.4 支持 -javaagent 吗?

javascript - chrome 开发人员工具控制台中对象之间的差异

javascript - 显示数组中的特定对象值而不是单独显示?