Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在Java中的每个第X项之后向列表中添加一项_Java_List_Loops_Arraylist_Listiterator - Fatal编程技术网

如何在Java中的每个第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 ) {

想知道实现以下目标最优雅的方式是什么:

“在列表中的每个第X项之后添加一项”

我有一个正在工作,但在我看来非常难看:

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