2017-12-06 7 views
0

나는 arraylists a 특정 개체가 들어 있습니다. 또한 arraylists b arraylists 이러한 개체 중 일부를 포함하는 포함되어 있습니다. 이제 arraylists a을 복제하고 arraylists b의 참조를 복제 된 객체로 업데이트하려고합니다. 의사 코드 예제 : 기존의 객체가 b에있는 경우 각 클론을 만든 후동일한 개체를 참조하는 여러 arraylists 복제

for(int i = 0; i < a.length; i++){ 
    o = a.get(i); 
    aClone.set(i, o); 
    for(int j = 0; j < b.length){ 
     for(int k = 0; k < b.get(j).length){ 
      if(b.get(j).get(k).value() == o.value()) 
       bClone.get(j).set(k, o); 
     } 
    } 
} 

이 코드 검사 및 복제로 대체 : 내가 생각 해낸

a = [object1,object2,object3,object4,object5,object6,object7,object8,object9,object10]; 
b = [[object3,object8,object5],[object2,object9,object1][object6,object7]]; 

//now, I can clone arraylist a 
aClone = [clone1,clone2,clone3,clone4,clone5,clone6,clone7,clone8,clone9,clone10]; 

//but how do I get a clone of arraylist b containing references to the clones of the objects like so: 
bClone = [[clone3,clone8,clone5],[clone2,clone9,clone1][clone6,clone7]]; 

뭔가는 다음과 . 나는 이것이 극도로 느릴 것이라고 상상한다. 그래서 이것이 어떻게 더 효율적으로 행해질 수 있는지 알고있다.

+0

당신이 말하는 참조의 종류가 확실하지 않지만 필자가 볼 수있는 것은 모두 기본 정수입니다. –

+1

@ MuratK. 내 실제 코드에서는 객체를 사용하고 있습니다. 여기서는 명확성을 위해 객체를 나타 내기 위해 숫자를 사용했습니다. – Jonan

+0

조난, 시도한 내용과 실행 한 문제가 무엇인지를 보여줘야한다는 것을 충분히 알았습니다. – alfasin

답변

1

그냥 이런 식으로 클래스를 생성 :

class CloneRepository { 
    private final Map<Object, Object> cloneMap = new HashMap<Object, Object>(); 

    public Object getClone(Object source) { 
     Object result = cloneMap.get(source); 

     if (result == null) { 
      result = source.clone(); 
      cloneMap.put(source, result); 
     } 

     return result; 
    } 
} 

그런 다음 새로운 CloneRepository을 만드는(). 각 목록의 항목을 복제 할 때 객체를 복제하는 대신 getClone() 메소드를 대신 사용하십시오. 를 들고 b에 목록으로 myWrapper.cloneObject().

:

1

당신은 객체에 대한 참조를 직접하지, 목록에서 래퍼 클래스를 개최하여이 작업을 수행 할 수 있습니다, 당신은 같은 메서드를 호출하여 래핑 된 개체를 복제 할 수 있습니다 래퍼 클래스에 대한 동일한 참조는 객체가 복제 될 때 2 개의 목록이 동기화됩니다.

0

배열을 사용하면 해시 맵을 포함 할 수 있습니다.이 배열의 위치는이 개체에 대한 것입니다. 그런 다음 배열을 복제 할 때이 객체의 색인을 찾고 (HashMap은 O (1)에 대해 수행함)이 참조를 변경해야합니다. 요약하면 O (N)입니다.

관련 문제