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));
}
}