2017-12-30 14 views
-2

ID 목록을 A, B, C 및 X = 3으로 읽는 경우 구체적으로 X로 복제 할 수있는 ID 목록이 있습니다. A, A, A, B, B, B, C, C, C ive는 루프를 통해이 작업을 시도했지만 항상 목록 크기가 커지면서 처음에는 붙잡혀 버렸습니다. 도움?자바 목록에서 항목을 복제하는 방법

+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

정말 감사합니다. tbh 저는 계속 지키려고 노력하고 있습니다. 원래 목록에 – martinseal1987

+0

@ martinseal1987 정확하게 - 쉽게 "[in-place"] (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는 언급하지 않은 이점이 있습니다. 그리고 설명을 추가하고 싶을지도 모릅니다.'al.add (X * j, al.get (X * j))'와 같은 줄은 즉시 명확하지 않습니다. 마지막으로 코드를 정리하면 좋은 생각 일 수 있습니다. 중괄호 스타일을 혼합하고 임의로 주석을 달 수 있습니다. – hnefatl

+0

내 친구, 같은 목록에서 수정을 원했기 때문에 연결된 목록을 사용했지만 새 목록을 요구하지 않았습니다. 사이에 끼워 넣기는 항상 연결 목록보다 권장되며 다른 목록에서는 권장되지 않습니다. 내 목표는 동일한 목록을 사용하여 결과를 얻는 것이 었습니다. 이유를 모르는 경우 투표를하지 마십시오. –

관련 문제