2013-07-09 2 views
-4

복사 목록 메서드를이 컬렉션으로 만들려고합니다. Collections.copy (,);복사 목록 메서드가 작동하지 않습니다.

내가 내 스스로 만들고 싶어

그래서 내가 containsAll 나 방법의 문제를 알고 있지만, 내가 무엇을 사용해야이 하나

import java.util.Arrays; 
import java.util.Collections; 
import java.util.List; 

public class NewMain { 

    public static void main(String[] args) { 
     String[] a1={"asdasd","sadasd","asdasd"}; 

     List<String> l1= Arrays.asList(a1); 

     String[] a2=new String[3]; 
     List<String> l2= Arrays.asList(a2); 
     copy(l1,l2); 
    } 

    public static void copy(List<String> copy_from,List<String> copy_to){ 

     for(int i=0;i<=copy_from.size();i++){ 
      System.out.print( copy_from.containsAll(copy_to)); 
     } 
    } 

} 

을했다?

+0

무엇이 질문입니까? – Brigham

+0

루프는 어떤 역할을합니까? 동일한 작업을 반복해서 수행하는 것으로 보입니다. 더 중요한 것은 실제로 새 비어있는 목록을 수정하는 메서드를 호출하지 않는다는 것입니다. – jpmc26

+0

첫 번째 목록을 지우고 두 번째 목록의 모든 것을 첫 번째 목록에 추가하는 것이 더 쉬울까요? –

답변

1
for(int i=0;i<=copy_from.size();i++){ 
    System.out.print( copy_from.containsAll(copy_to)); 
} 

sysout 문 외에 아무것도 실행하지 않습니다.

public static void copy(List<String> copy_from,List<String> copy_to){ 
    if (copy_from.size() > copy_to.size()) 
      throw new IndexOutOfBoundsException("Source does not fit in dest"); 
    } else { 
     for(String toCopy : copy_from) { 
      copy_to.add(toCopy); 
     } 
    } 
} 

이것은 당신의 copy_from 목록의 모든 요소에 대해 반복하고 copy_to 목록에 추가 각 루프입니다 :

는 당신의 라인을 따라 뭔가를 원한다.

+1

이것은'Collections.copy'와 같은 작업을 수행하지 않습니다. javadoc에서 : "한 목록의 모든 요소를 ​​다른 목록으로 복사합니다. 작업 후에 대상 목록의 복사 된 각 요소의 색인은 원본 목록의 색인과 동일합니다. ** 대상 목록은 적어도 원본 목록만큼 길어지면 대상 목록의 나머지 요소는 영향을받지 않습니다 **. " – Brigham

+0

이 답변을 업데이트했습니다. –

+0

감사합니다. 정확히 쓰는대로하고 싶습니다. 각 루프가 가장 쉬운 방법이지만, 예외가 있습니다. 해결책을 시도한 경우 ---------------------- ---------------------------------------- 스레드 "main"의 예외 java.lang java.util.AbstractList.add (AbstractList.java:148) java.util.AbstractList.add에서 \t (AbstractList.java:108) tst.Tst.copy에서 \t (Tst.java:38에서 .UnsupportedOperationException \t) \t at tst.Tst.main (Tst.java:28) Java 결과 : 1 어떻게해야합니까? –

0

이렇게하면 요소를 추가 할 때 copy_from 및 copy_to가 커질 수 있다고 가정해야합니다.

public static void copy(List<String> copy_from,List<String> copy_to) throws Exception { 
     //handle exception according to your wish 
     if (copy_from !=null && copy_to == null) { 
      throw new Exception("Source is not empty by Destination is null"); 
     } 
     for(String string : copy_from){ 
      copy_to.add(string); 
     } 
    } 
+0

source == null의 문제점은 무엇입니까? 아무 것도 복사하지 않는 것은 합법적 인 작업이어야하며 수표가 없이는 복사해야합니다. – Thorben

+0

나는 선택 사항이라고 이미 언급했다. 어쨌든, 나는 제거했다. 감사! –

0

Collections.copy와 같은 방식으로 작동합니다.

public static void copy(List<String> copy_from,List<String> copy_to){ 
    if (copy_to.size() < copy_from.size()) { 
     throw new IndexOutOfBoundsException("copy_to is too small."); 
    } 


    ListIterator<String> fromIter = copy_from.listIterator(); 
    ListIterator<String> toIter = copy_to.listIterator(); 
    while (fromIter.hasNext()) { 
     String next = fromIter.next(); 
     toIter.next(); 
     toIter.set(next); 
    } 

} 
0

이미있는 요소는 복사하지 않으려한다고 가정합니다. 그러면 다음과 같이 할 수 있습니다.

public static void copy(List<String> copy_from,List<String> copy_to){ 
    if(copy_to==null){throw Exception("copy_to can't be null!")} 
    //additional checks should be added 
    for(String elem : copy_from){ 
     if(!copy_to.contains(elem)){ 
      copy_to.add(elem); 
     } 
    } 
} 
관련 문제