在数组中的每个第二个元素之后添加数据

时间:2020-08-20 14:00:38

标签: java list algorithm arraylist data-structures

我想在每个第二个元素之后在数组中添加对象/数据。为了更清楚一点,我将使用一个简单的示例

我有个arrayList:

List<Object> list = new ArrayList<>();
list.add("messi");
list.add("ronaldo");
list.add("rooney");
list.add("pogba");
list.add("hazard");

print(list);
//output : [messi,  ronaldo, rooney, pogba,hazard]

我想要的是:

//[messi,  ronaldo, DATA, rooney, pogba, DATA, hazard]

我如何实现这一目标。

在每个第二个元素之后在数组中添加数据。

4 个答案:

答案 0 :(得分:3)

通过维护计数器。

public class Main {
    public static void main(String[] args) {
        
        List<Object> list = new ArrayList<>();
        list.add("messi");
        list.add("ronaldo");
        list.add("rooney");
        list.add("pogba");
        list.add("hazard");

        int counter = 0 ;
        List<Object> data = new ArrayList<>();
        for(Object obj : list){
            data.add(obj);
            counter = counter + 1;
            if(counter%2 == 0)
                data.add("DATA");
        } 
        
        for(Object obj : data)
            System.out.println(obj);
    }
}

答案 1 :(得分:2)

因此,您可以做的是创建一个新列表来存储带有新对象的旧数据:

List<Object> list = new ArrayList<>();
List<Object> newlist = new ArrayList<>();

list.add("messi");
list.add("ronaldo");
list.add("rooney");
list.add("pogba");
list.add("hazard");

for(int i = 0; i < list.size(); i++) {
   if(i%2==0) {
       // Add DATA after 2 items
       newlist.add(data);
    }
    newlist.add(list.get(i));
 }

请问有人格式化,因为我正在用手机写信。

答案 2 :(得分:0)

class sample {
    public static void main(String[] args) {
        List<Object> list = new ArrayList<>();
        sample.addList("messi", list);
        sample.addList("ronaldo", list);
        sample.addList("rooney", list);
        sample.addList("pogba", list);
        sample.addList("hazard", list);
        System.out.println(list);
    }

    private static void addList(String value, List<Object> objects) {
          if (!objects.isEmpty() && (objects.size() % 3 == 2)) {
            objects.add("Data");
        }
        objects.add(value);

    }
}

您可以如上所述创建一种实用程序方法。 对于每次添加元素之前,请检查是否 list.size() % 3 == 2 ,然后添加其他元素。

这将为您提供帮助。

答案 3 :(得分:0)

查看所需的输出和插入的DATA值的索引:

class PlyViewportWidget(QtWidgets.QOpenGLWidget):
    # [...]

    def initializeGL(self):
        # [...]

        self.vao = gl.glGenVertexArrays(1) # <--- 
        gl.glBindVertexArray(self.vao)     # <--- 

        self.vbo = gl.glGenBuffers(1)
        self.ebo = gl.glGenBuffers(1)

        gl.glBindBuffer(gl.GL_ARRAY_BUFFER, self.vbo)
        gl.glBufferData(gl.GL_ARRAY_BUFFER, vertices.nbytes, vertices, gl.GL_STATIC_DRAW)

        gl.glBindBuffer(gl.GL_ELEMENT_ARRAY_BUFFER, self.ebo)
        gl.glBufferData(gl.GL_ELEMENT_ARRAY_BUFFER, indices.nbytes, indices, gl.GL_STATIC_DRAW)

        gl.glEnableVertexAttribArray(0)
        gl.glVertexAttribPointer(0, 3, gl.GL_FLOAT, gl.GL_FALSE, 3 * ctypes.sizeof(ctypes.c_float), ctypes.c_void_p(0))

        gl.glBindBuffer(gl.GL_ARRAY_BUFFER, 0)
        gl.glBindVertexArray(0)

DATA值进入索引2、5、8、11 ...

这意味着这是一个简单的[messi, ronaldo, DATA, rooney, pogba, DATA, hazard] 0 1 2 3 4 5 6 循环,调用add(int index, E element)

for

输出

List<Object> list = new ArrayList<>();
list.add("messi");
list.add("ronaldo");
list.add("rooney");
list.add("pogba");
list.add("hazard");
System.out.println(list);

for (int i = 2; i < list.size(); i += 3) {
    list.add(i, "DATA");
}
System.out.println(list);