2017-12-30 44 views
-2

私のリストがA、B、C、X = 3を読んでいる場合は特にXでそれらを複製できるようにidのリストを持っています。 A、A、B、B、B、C、C、C iveはループを使ってこれをやろうとしましたが、リストのサイズが常に大きくなり、リストが成長し続けると、助けて?どのようにJavaのリスト内の項目を複製する

+3

開始リストを変更しないで、結果として新しいリストを作成する必要があるように思えます。 – hnefatl

+1

新しいアイテムを作成します。新しいアイテムは、アイテムごとにX回になります。次に、そのリストを返すか古いものを消去し、その内容を新しいリストに置き換えます。 – Pshemo

答えて

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

我々入力リストを反復して構築した新しい "results"リストを作成します - 入力リストの各項目について、その項目を結果リストに何回か追加します。これにより、同じリスト内でアイテムを複製しようとするよりもアルゴリズムがずっと簡単になります!

毎回日付を複製することに注意してください。そうでなければ、すべて同じ実際のDateオブジェクトを指す要素のシーケンスを含むリストになります。ほとんどの場合理想的ではありません。


あなたは、この方法は、より再利用可能にするためにジェネリック医薬品を使用することができます - 理想的に、私たちは、これはすべてのCloneableのオブジェクトだけでなく、Dateのために働くしたいと思います:

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)

+0

これはすごく感謝しています。元のリストにある – martinseal1987

+0

@ martinseal1987正確には、["インプレース"](https://en.wikipedia.org/wiki/In-place_algorithm)で簡単に行うことのできるアルゴリズムがあります。それら。 – hnefatl

1

私はこのコンピュータにJava IDEを持っていないので、C#で解決策を書いたが、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; 
} 
+0

これはうまくいくように見えますが、以下の解決策にポイントを付けるつもりです。迅速な返信のために多くの感謝を申し上げます。 – martinseal1987

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

     } 

    } 

} 
+0

'LinkedList'は必要ありません。このアプローチを使用しているときにはどのリストも行いますが、' LinkedList'にはあなたが言及していない利点が1つあります。また、いくつかの説明を加えたいかもしれません。 'al.add(X * j、al.get(X * j))'のような行はすぐには分かりません。最後に、コードをクリアすることは良い考えです。ブレーススタイルを混ぜて、ランダムなコメントを付けます。 – hnefatl

+0

私の友人、私は彼が同じリストの変更を望んでいたので、リンクされたリストを使用しましたが、新しいリストを求めませんでした。間に挿入すると、リンクされたリストでは常に推奨され、他のリストでは表示されません。私の目的は、同じリストを使用して結果を達成することでした。理由が分からない場合は投票を中止してください。 –

関連する問題