我需要在java中合併兩個字符串列表,我不太確定最好的方式來完成它。我必須使用迭代器和compareTo()方法。例如...使用迭代器合併列表
實施例:L1:A,B,C,d L2:B,d,F,G的結果:A,B,B,C,d,d,F,G
我可以假設輸入列表已經排序,我不能使用contains()方法。我有一些初步檢查,但while循環是什麼我堅持。
public static ListADT<String> merge(ListADT<String> L1,ListADT<String> L2) throws BadListException {
ListADT<String> L3 = new ArrayList<String>;
if(L1 == null || L2 == null) {
throw new BadListException();
}
Iterator<String> itr1 = new L1.iterator();
Iterator<String> itr2 = new L2.iterator();
if(L1.size() == 0 && L2.size() == 0) {
return L3;
}
if(L1.size() == 0 && L2.size() != 0) {
for(int i = 0; i < L2.size(); i++) {
return L3.add(L2.get(i));
}
}
if(L2.size() == 0 && L1.size() != 0) {
for(int i = 0; i < L1.size(); i++) {
return L3.add(L1.get(i));
}
}
while(itr1.hasNext() || irt2.hasNext()) {
//merge the lists here?
}
}
任何幫助,將不勝感激。
這是不正確的:'L3.add(S1); L3.add(s2);''L1'中的下一項可能小於's2',但您已經將's2'加到輸出中!每循環迭代,合併循環只需要推進一個,而不是兩個迭代器。考慮合併「{1,2}」和「{3}」。你的算法會產生「{1,3,2}」,因爲它會在相同的迭代中加入1和3,然後纔有機會看「2」。 – dasblinkenlight 2013-02-11 02:02:21
是的,沒有注意到衝動寫道。實際上,'Iterator'沒有辦法在不推進迭代器IIRC的情況下獲取元素。這完全違背了使用迭代器的目的。 –
Jack
2013-02-11 02:04:18
我的下一個問題是如何在不推進迭代器的情況下獲得下一個值,以便我可以compareTo()另一個列表中的另一個值。 – user1874239 2013-02-11 02:25:44