코드의 목적은 ArrayList> listOfLists의 각 항목을 반복하고 이전 목록을 현재 목록과 결합하고 현재 목록을 정렬하며 다음 목록을 제거하는 것입니다 (이미 결합 된 이후). 목록이 하나만 남을 때까지이 작업이 필요합니다. 이를 통해 ArrayList.get (0)의 내용을 파일로 추출 할 수 있습니다.Java ArrayList는 이전 항목에 현재 항목을 추가합니다. 현재 항목을 제거하십시오
listOfLists는 코드 조각보다 먼저 정의되었습니다. 내가 고민하는 것은 : 어떻게 alStr1 콘텐츠를 listOfLists.get (0)으로 다시 보낼 수 있습니까?
while (listOfLists.size() > 1) {
System.out.println(">>>>>>>>>>>>>Iteration"+i);
Iterator<ArrayList<String>> itr = listOfLists.iterator();
while(itr.hasNext()) {
ArrayList<String> alStr1 = itr.next();
try{
ArrayList<String> alStr2 = itr.next();
alStr1.addAll(alStr2);
Collections.sort(alStr1);
itr.remove();
}catch (NoSuchElementException e){
e.printStackTrace();
break;
}
}
}
제공되는 모든 조언을 크게 듣습니다. 감사
LOGIC:
------
L1 L2 L3 L4 L5 --> L1+L2 L3+L4 L5
L1+L2 L3+L4 L5 --> L1+L3 L5
L1+L3 L5 --> L1+L5
L1+L5 --> L1
L1 => going to a file.
listOfLists will include these 5 lists:
L1: [100,101,102]
L2: [200,201,202]
L3: [300,301,302]
L4: [400,401,402]
L5: [500,501,502]
Iteration 1:
L1 = L1+L2>> [100,101,102,200,201,202]
L3 = L3+L4>> [300,301,302,400,401,402]
L5 = L5 >> [500,501,502]
Iteration 2:
L1 = L1+L3>> [100,101,102,200,201,202,300,301,302,400,401,402]
L5 >> [500,501,502]
Iteration 3:
L1 = L1+L5>> [100,101,102,200,201,202,300,301,302,400,401,402,500,501,502]
이 내가 달성하기 위해 노력하고 무엇을 설명 할 것입니다. 이것을 먼저 추가하지 않으셔서 죄송합니다.
"다음"목록을 정렬 한 다음 "현재"목록에 추가하면 결합 된 목록을 정렬하지 않습니다. 그러나 나는 왜 당신이이 방법을 전혀하고 있는지 확실하지 않습니다. 이 다소 복잡한 경로가 꼭 필요합니까? 그냥 모든 목록을 반복하고 정렬 할 때 첫 목록에 추가 할 수는 없습니까? (마지막에'listOfLists'가 필요합니까, 아니면 하나의 결합 된 목록 만 필요합니까?) 더 많은 컨텍스트가 도움이 될 것입니다. –
@JonSkeet : 컨텍스트의 경우 정렬 알고리즘의 일부입니다. 세미 병합 정렬을 구현하려고합니다. 이 경우 데이터 세트를 여러 부분으로 나누고 각 부분을 개별적으로 정렬 한 다음 병합을 시작한 다음 모든 목록을 병합하고 정렬 할 때까지 계속 정렬하려고합니다. 병합 정렬은 레코드를 하나의 요소로 나누고 거기에서 병합 및 정렬을 시작합니다. – shivster
@ JonSkeet : 두 번째 목록을 정렬하고 결합 된 목록을 정렬하는 것은 맞습니다. alStr1이어야합니다. 그것을 반영하기 위해 코드를 편집하십시오. – shivster