我有一个日期ID列表,以便能够通过X复制它们,所以特别是如果我的列表读取A,B,C和X = 3 id,就像它读取A,A,A,B,B,B,C, C,C我尝试通过一个循环来做这个,但是首先卡在列表大小总是增长,然后再将项目放在正确的索引中,因为列表不断增长,任何人都可以帮助吗?
对于这样的事情,通过观察而不是通过听取解释做什么来学习可能更容易,所以这里有一些简单的工作代码:
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
对象,而不仅仅是Date
s:
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;
}
我在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;
}
您需要一个链接列表来添加它。使用此程序来实现该功能。
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));
}
}
}
}