Java 将整数添加到ArrayList<;整数>;

Java 将整数添加到ArrayList<;整数>;,java,arrays,object,arraylist,linked-list,Java,Arrays,Object,Arraylist,Linked List,我有一个LinkedLists(链接列表的数组)的ArrayList。LinkedLists包含整数(Integer) 但是当我将其转换为整数(注释掉的行)时,数组中充满了空值。有人知道我做错了什么吗 这里是我将项目添加到bucket的地方: for (int i = 0; i < unsorted.size(); i++) { int digit = (unsorted.get(i) / position) % 10; buckets.get(digit).add(uns

我有一个
LinkedList
s(链接列表的数组)的
ArrayList
LinkedList
s包含整数(
Integer

但是当我将其转换为
整数
(注释掉的行)时,数组中充满了
空值
。有人知道我做错了什么吗

这里是我将项目添加到
bucket
的地方:

for (int i = 0; i < unsorted.size(); i++) {
    int digit = (unsorted.get(i) / position) % 10;
    buckets.get(digit).add(unsorted.get(i));
}

您在这里使用的是原始形式的
LinkedList

private List<LinkedList> buckets;

bucket=newarraylist();
removeLast
的返回强制转换为
Integer
是泛型之前实现此功能的方法。但是,您从未在每个
LinkedList
中插入任何项目,因此
removeLast
返回
null
。如果您想要返回一些内容,请首先在插入到
存储桶中的每个
链接列表中插入一些内容


转换为
Integer
仍然有效,但最好将
Integer
作为类型参数提供给
LinkedList
,特别是因为您使用泛型时,已经将
LinkedList
作为类型参数提供给
List

插入ArrayList的项“排序”是从链接列表LinkedList中获取的项目

但你从来没有真正添加任何项目到它。您只需创建一个LinkedList并将其添加到存储桶列表中

您需要在临时列表中添加一些内容

for (int i = 0; i < 10; i++) {
    LinkedList<Integer> temp = new LinkedList<Integer>();
    // Add something to the temp LinkedList
    buckets.add(temp);
}
for(int i=0;i<10;i++){
LinkedList temp=新建LinkedList();
//在临时链接列表中添加一些内容
添加(温度);
}
在嵌套循环中

  for (int i = 0; i < buckets.size(); i++) {
     for (int j = 0; j < buckets.get(i).size(); j++) {

        // ***** here *****
        sorted.add(buckets.get(j).poll());

     }
  }
致:

也许一种更简洁、更直观的编码方式是:

  for (int i = 0; i < buckets.size(); i++) {
     LinkedList<Integer> innerList = buckets.get(i);
     for (int j = 0; j < innerList.size(); j++) {
        sorted.add(innerList.poll());
     }
  }

虽然如果将
存储桶
声明为
列出存储桶
,这并不能有效地使用LinkedList。稍微好一点的方法是使用
列出存储桶
。谢谢,我已经这样做了,它修复了错误,但仍然得到空值。请重新阅读链接和协议。你不应该在这里发布链接,而应该在这里发布实际的工作代码和你的问题。明白了,从现在开始我会这么做。谢谢,谢谢你的回答。加法消除了错误,但仍然得到空值。我实际上是在向LinkedList添加值,只是没有包含代码。我已经更新了问题。你知道为什么我还是空的吗?谢谢你的回答。我实际上是在向LinkedList添加值,只是没有包含代码。我已经更新了问题。你知道我为什么仍然为空吗?我添加了一个包含
bucket
内容的屏幕截图。谢谢!我的
i
j
变量被切换。这个简单的编辑成功了。虽然,您的两个建议都使代码更加清晰易懂,因此我将使用其中一个实现。出于好奇,使用迭代器而不是遍历大小是否有好处?@SFBA26:迭代器更适合LinkedList,因为它不涉及调用
get(…)
所需的随机访问。如果从循环中删除项,迭代器有助于避免并发修改异常。最后,如果bucket中有多个项,则您的
poll()
代码将不起作用。如果
remove()
是可选的,为什么不为每个循环使用一个:
for(bucket中的整数j.get(i)){…}
private List<LinkedList> buckets;
private List<LinkedList<Integer>> buckets;
buckets = new ArrayList<LinkedList<Integer>>();
for (int i = 0; i < 10; i++) {
    LinkedList<Integer> temp = new LinkedList<Integer>();
    // Add something to the temp LinkedList
    buckets.add(temp);
}
  for (int i = 0; i < buckets.size(); i++) {
     for (int j = 0; j < buckets.get(i).size(); j++) {

        // ***** here *****
        sorted.add(buckets.get(j).poll());

     }
  }
sorted.add(buckets.get(j).poll());
sorted.add(buckets.get(i).poll());
  for (int i = 0; i < buckets.size(); i++) {
     LinkedList<Integer> innerList = buckets.get(i);
     for (int j = 0; j < innerList.size(); j++) {
        sorted.add(innerList.poll());
     }
  }
  for (int i = 0; i < buckets.size(); i++) {
     LinkedList<Integer> innerList = buckets.get(i);
     for (Iterator<Integer> iterator = innerList.iterator(); iterator.hasNext();) {
        sorted.add(iterator.next());
        iterator.remove(); // this guy is optional
     }
  }
  for (int i = 0; i < buckets.size(); i++) {
     LinkedList<Integer> innerList = buckets.get(i);
     for (int j = 0; j < innerList.size(); j++) {
        sorted.add(innerList.get(j));
     }
  }