2014-01-11 30 views
-1

我們在學校做一個任務是按字母順序排序兩種不同ArrayList s轉換既包含列表元素的字典序按字母順序排序使用.compareTo一個ArrayList <String>()

例如最後數組列表...

ArrayList sent1包含按字母順序排列[., adam, mark]

ArrayList sent2包含按字母順序排列[., betsy, kyle, william]

ArrayList sent3必須按字母順序包含兩個ArrayLists中的所有元素。

我似乎無法弄清楚如何去做。我的老師提到使用while循環,但我不只是瞭解如何編寫過程。將sent1sent2組合成sent3,然後使用Collections.sort(sent3)將使過程變得更容易和更緊湊,但實驗室的目標是練習使用compareTo()

+0

你不是說最初的列表是排序的,對吧?你想結合兩個未排序的列表並對它們進行排序?您的包含聲明有點令人困惑 – keyser

+0

請查看 - http://www.mkyong.com/java/java-object-sorting-example-comparable-and-comparator/。 –

+0

我的導師已經編寫了按字母順序發送1和發送2的代碼。現在我們必須將這兩個按字母順序排列的列表並將它們按字母順序放入發送3中。我只是困惑於如何去做 – user3185129

回答

2

如果每個源列表已經排序,只要看看每個列表中的第一個元素,加上「低」(按字母順序先),以輸出列表,並重復。

+0

讓我給你一個旋轉。 – user3185129

+0

所以我把它弄倒了。我正在使用for()循環,並將sent1.get(i)與sent2.get(i)進行比較。如果sent1.get(i).compareTo(sent2.get(i)<0,我將它添加到sent3。我明白了,我不知道如何使循環工作,以便哪個數字更大,然後使用那要比較下一個元素 – user3185129

+0

@ user3185129您需要刪除您插入到目的地列表中的任何項目 – chrylis

0

這很簡單;

List<String> sent3 = new ArrayList<String>(sent1); 
sent3.addAll(sent2); 
Collections.sort(sent3, new Comparator<String>() { 
    public int compare(String a, String b) { 
     return a.compareTo(b); // usage here! 
    } 
} 
+1

除此不使用'compareTo()'。他甚至在他的問題中提到了這個選項。 – keyser

+0

@ᴋᴇʏsᴇʀ它在內部 – Bohemian

+0

您應該重新閱讀問題 – keyser

0

你在找什麼是使用2個迭代器,只是合併這2個列表。 我會給你一些僞代碼。

ArrayList sent1, sent2, sent3; 
int i1, i2; 
i1 = i2 = 0; 
while (i1 < sent1.length() && i2 < sent2.length()) 
{ 
if (sent1[i2].compareTo(sent2[i1]) 
{ 
    sent3.add(sent1[i2]); 
    i2++; 
}else 
{ 
    sent3.add(sent1[i1]); 
    i21+; 
} 
} 
while(i1 < sent1.length()) sent3.add(sent1[i1++]); 
while(i2 < sent2.length()) sent3.add(sent2[i2++]); 

這裏每次都會添加到我的sent3最小的sent1和sent2第一項。當我將這些列表中的一個清空時,我會將其餘的其他元素附加到sent3中。

+0

我有按字母順序排列的列表,但姓氏william沒有添加到列表中。否則使用for()循環 – user3185129

0

我認爲,你可以這樣做:

複製數組1和數組2至ARRAY3;然後,排序array3。你不知道如何使用compareTo()進行排序?檢查是java文檔。