將兩個已排好序的List做merge 返回一個新的順序的List
import java.util.Arrays;
import java.util.List;
import java.util.ListIterator;
public class ListMerge {
public static List ListMerge(List first, List second) {
ListIterator iteratorFirst = first.listIterator();
ListIterator iteratorSecond = second.listIterator();
int firstPosition = 0;
Object next;
boolean endOfFirst = false;
while (iteratorSecond.hasNext()) {
next = iteratorSecond.next();
boolean existed = first.contains(next);
if (existed) {
continue;
}
while (((Comparable) first.get(firstPosition)).compareTo(next) < 0){
firstPosition += 1;
if (firstPosition < first.size() - 1) {
continue;
} else {
endOfFirst = true;
break;
}
}
if (!endOfFirst) {
first.add(firstPosition, next);
} else {
while (iteratorSecond.hasNext()) {
next = iteratorSecond.next();
first.add(next);
}
break;
}
}
return first;
}
public static void main(String[] args) {
List first = new ArrayList();
for (int i = 0; i < 10; i++) {
first.add(new Integer(i * 2));
}
List second = new ArrayList();
for (int i = 0; i < 10; i++) {
second.add(new Integer(i * 2 + 1));
}
ListIterator iteratorFirst = first.listIterator();
ListIterator iteratorSecond = second.listIterator();
while (iteratorFirst.hasNext()) {
System.out.print(iteratorFirst.next() + " ");
}
System.out.println();
while (iteratorSecond.hasNext()) {
System.out.print(iteratorSecond.next() + " ");
}
System.out.println();
List result = ListMerge.ListMerge(first, second);
ListIterator iteratorResult = result.listIterator();
while (iteratorResult.hasNext()) {
System.out.print(iteratorResult.next() + " ");
}
System.out.println();
}
}
結果 :
0 2 4 6 8 10 12 14 16 18
1 3 5 7 9 11 13 15 17 19
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 18 19
現在的缺點是改變了傳入的first對象的內容...
大概實現了這個題目的要求
不過DS掌握的不好,呵呵,所以不知道有沒有什麼簡單的方法