如何在java中复制列表中的项目

问题描述 投票:-2回答:3

我有一个日期ID列表,以便能够通过X复制它们,所以特别是如果我的列表读取A,B,C和X = 3 id,就像它读取A,A,A,B,B,B,C, C,C我尝试通过一个循环来做这个,但是首先卡在列表大小总是增长,然后再将项目放在正确的索引中,因为列表不断增长,任何人都可以帮助吗?

java list
3个回答
1
投票

对于这样的事情,通过观察而不是通过听取解释做什么来学习可能更容易,所以这里有一些简单的工作代码:

public List<Date> repeat(List<Date> dates, int times)
{
    List<Date> results = new ArrayList<>();
    for (Date d : dates)
    {
        for (int i = 0; i < times; ++i)
            results.add(d.clone());
    }
    return results;
}

我们通过迭代输入列表来构建新的“结果”列表 - 对于输入列表中的每个项目,我们将该项目多次添加到结果列表中。这使得算法比尝试在同一列表中复制项目简单得多!

请注意,我们每次都会克隆日期 - 否则我们最终会得到一个包含所有指向同一个实际Date对象的元素序列的列表 - 在大多数情况下并不理想。


您可以使用泛型来使此方法更具可重用性 - 理想情况下,我们希望这适用于所有Cloneable对象,而不仅仅是Dates:

public static <T extends Cloneable> List<T> repeat(List<T> in, int times)
{
    List<T> results = new ArrayList<>();
    for (T x : in)
    {
        for (int i = 0; i < times; ++i)
            results.add(x);
    }
    return results;
}

Code demo (generics version)


1
投票

我在C#中编写了解决方案,因为我在这台计算机上没有Java IDE,但它只有一个不同于Java的头发。逻辑(和大多数代码)是相同的。试试这个:

public static List<string> createList(List<string>originalList, int x)
{
    List<string> newList = new List<string>();
    foreach(string s in originalList)
    {
        for(int i=0; i<x; i++)
        {
            newList.Add(s);
        }
    }
    return newList;
}

-1
投票

您需要一个链接列表来添加它。使用此程序来实现该功能。

import java.util.LinkedList;

public class LinkedListExample {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        LinkedList<String> al=new LinkedList<>();
        al.add("A");
        al.add("B");
        al.add("C");
        modify(al,4);

        System.out.println(al);
    }

    private static void modify(LinkedList<String> al, int X) {
        int size=al.size();
        for(int j=0;j<size;j++)
        {
            for(int i=1;i<X;i++)
            {
                al.add(X*j, al.get(X*j));
            }

        }

    }

}
© www.soinside.com 2019 - 2024. All rights reserved.