如何在Java中的每个第X项之后向列表中添加一项
想知道实现以下目标最优雅的方式是什么: “在列表中的每个第X项之后添加一项” 我有一个正在工作,但在我看来非常难看:如何在Java中的每个第X项之后向列表中添加一项,java,list,loops,arraylist,listiterator,Java,List,Loops,Arraylist,Listiterator,想知道实现以下目标最优雅的方式是什么: “在列表中的每个第X项之后添加一项” 我有一个正在工作,但在我看来非常难看: ListIterator<Something> it = items.listIterator(); int i = 0; int breakPoint = 3; while(it.hasNext()) { it.next(); i++; if(i == breakPoint ) {
ListIterator<Something> it = items.listIterator();
int i = 0;
int breakPoint = 3;
while(it.hasNext()) {
it.next();
i++;
if(i == breakPoint ) {
it.add(new Something()....);
i = 0;
}
}
ListIterator it=items.ListIterator();
int i=0;
int断点=3;
while(it.hasNext()){
it.next();
i++;
if(i==断点){
添加(新事物()…);
i=0;
}
}
我希望这样做时不使用外部库等。还有什么更优雅的方法是可读且不依赖技巧的吗?您不需要迭代器,请使用
void add(int index,E element)
:
for(int i=3;i
首先在索引3处添加一个元素。请注意,索引3处的原始元素将移动到索引4,这就是为什么循环中有
I++
(因为下一个元素应该添加到索引7,而不是索引6)。您不需要迭代器,请使用void add(int index,E element)
:
for(int i=3;i
首先在索引3处添加一个元素。请注意,索引3处的原始元素将移动到索引4,这就是为什么循环中有
I++
(因为下一个元素应该添加到索引7,而不是索引6)。您可以使用%
简化逻辑<代码>如果(i%3==0)。。。添加()。。。i++。那么你就不需要断点变量了,我更担心的是效率,而不是优雅本身。我知道您应该专注于编写可读的代码,但在这样做时,编写速度异常缓慢的代码非常容易。除非你处理一个链表,否则在列表中间加上一个杀手就行了。我的方法是为列表末尾的额外项目分配空白空间,然后将元素随机排列。您可以使用%
<代码>如果(i%3==0)。。。添加()。。。i++。那么你就不需要断点变量了,我更担心的是效率,而不是优雅本身。我知道您应该专注于编写可读的代码,但在这样做时,编写速度异常缓慢的代码非常容易。除非你处理一个链表,否则在列表中间加上一个杀手就行了。我的方法是为列表末尾的额外项目分配空白空间,然后将元素混洗。通过您的示例,我得到了java.lang.UnsupportedOperationException
。@EugeneKirin您使用了哪个list
实现?如果使用某个不可变列表(或固定大小列表),add
将失败。它可以与java.util.ArrayList
配合使用代码>@EugeneKirin,这就是原因Arrays.asList
返回一个固定大小的List
(因为它是由用于创建它的数组支持的),所以它不支持add
。我得到了java.lang.UnsupportedOperationException
。@EugeneKirin您使用了哪个List
实现?如果使用某个不可变列表(或固定大小列表),add
将失败。它可以与java.util.ArrayList
配合使用代码>@EugeneKirin,这就是原因Arrays.asList
返回固定大小的List
(因为它由用于创建它的数组支持),因此它不支持add
。
for (int i = 3; i < items.size(); i+=3) {
items.add (i++, new Something());
}