2016-04-16 66 views
0

我有一個字符串列表,它們已經按字母順序排列。這裏我們只是假設用戶按字母順序輸入項目。按順序將字符串插入到數組中

我有一個類中的字符串項目列表和一個方法,其中有人可以通過另一個字符串對象插入到數組中。

String[] strings = new Strings[0]; 

public void add(String a){ 
//here the current list is resized and we need to add the new item 
Strings[] newSizedList = new String[strings.length+1]; 
//for loop here to copy items over into the new resized array. 
} 

問題是,該列表被假定爲按字母順序排列。我需要做的是將傳入的字符串插入數組中正確的位置,同時仍按字母順序保留其他項目。

限制是我不想使用任何種類的「排序算法」。換句話說,我不想一次把整個列表整理並整理。

我想保留該項目的順序,因爲它已經在訂單中,但將當前項目插入列表中的相應位置。

我不能使用任何集合靜態方法或Java集合類的靜態方法

有誰知道如何可以做到這一點?

+0

,你可以在任何位置插入您的字符串,然後使用Arrays.sort(),或者如果你想實現你的方法數組排序http://stackoverflow.com/questions/12986386這個帖子看看/ sorting-an-array-of-strings-with-java – esprittn

回答

1

既然你要使用循環反正克隆數組,就沒有必要做任何類型的排序位置(這應該是個好消息,你說這不是一個選項)的。只需將物品插入正確的位置即可。

//for loop here to copy items over into the new resized array. 
//We use two counters here, ii for the old list and i for the new 
int ii = 0, nn = strings.length; 
for(int i = 0, n = newSizedList.length; i < n; i++) { 

    if(ii != nn && (ii != i || strings[ii].compareTo(a) < 0)){ 
     //The item in newSizedList[i] will be taken from the original list if 
     //we have not already taken all the items from there (ii != nn) and 
     //a) we have already inserted the new item (ii != i) 
     //or b) a is alphabetically "greater" than the corresponding item in original array 
     newSizedList[i] = strings[ii]; 
     ii++;//Keep the other counter in sync 
    } else { 
     //Otherwise, this is the place for the new item 
     newSizedList[i] = a; 
    } 

} 
+0

如果我有一個傳入的項目列表,並且我想按照上述相同的算法按照字母順序將這些項目輸入到傳入的列表中? – user1664285

+0

不幸的是,這會給問題增加很多複雜性,因此這個片段也需要一些修改。例如,'i!= ii'測試不起作用,您需要對該數組中的所有項目進行比較,現在我們只是比較'a'。有了一些改變,它應該仍然是可能的,但是如果你只是對數組進行排序或者像其他人所建議的那樣使用SortedSet,你將會節省很多麻煩。這種方法適用於這裏,因爲只插入一個項目的任務非常簡單。 – noppa

+0

我明白你的意思了。所以我要做的就是將一個字符串列表作爲參數,然後通過列表循環,通過調用列表中每個字符串的上述方法,將每個字符串添加到數組中的正確位置。這聽起來像是一個好的解決方案嗎? – user1664285

0

Arrays.binarySearch可用於有效地找到正確的插入點。

+0

我無法使用任何Collection靜態方法 – user1664285

+0

在這種情況下,查找二進制搜索算法並自行實現,假設您需要插入以O(logn)時間運行。 –

0

只需在Arrays類中調用正確的方法即可。

Arrays.sort(newSizedList); 
+0

我無法使用任何Collection靜態方法 – user1664285

相關問題