2014-02-28 59 views
0

所以我有一個國家的列表,我正在從一個文本文件中讀取一些國家在那裏不止一次。我需要把每個國家的名字都放進一個沒有任何雙打的字符串數組中,或者把國家放在那裏兩次。我試過使用for循環,但無法將我的頭圍繞所需的邏輯進行包裝。將只有唯一值加入數組的問題

在此先感謝。

+9

你可以使用'Set'並節省一些努力。 –

+0

@RohitJain你能解釋一下嗎?我不知道一套是什麼 – user3002906

+0

@ user3002906你自己試着用谷歌搜索「Java Set」嗎?互聯網上有豐富的知識。 –

回答

1

嘗試使用Set。一個Set可以包含一個且不多於一個特定實例(instance1.equals(instance2)不會是true)。
實例化一個Set像這樣:

Set<String> s = new HashSet<String>(); 

然後用一個for循環增加值。

String[] countries = {"JP", "US", "CN", "RU", "RU"}; //just make pretend these were read from a file. 
for (String countryName: countries){ 
    s.add(countryName); // RU will only be added once 
} 

System.out.println(s); 

輸出:[JP,美國,RU,CN]

0

有三種不同的方法我可以看到這個工作:

  1. 使用一組。這是最有效和最簡單的,並且使用可運行的代碼。

  2. 每次讀入元素時,遍歷數組,並查看數組是否已經包含該元素。如果有,請不要添加它。如果你不能使用Sets,這是最簡單的代碼。

  3. 讀入所有元素,對數組進行排序。遍歷數組,如果當前元素不等於前一個元素,則將其添加到新數組中。這比#2(O(nlog(n)) vs O(n^2))更有效,但需要更多的代碼。

0

爲了檢查國家是否在數組中,使用if語句。正如你在每個國家讀到的一樣,這個檢查是否存在於數組中。如果沒有,它會將國家添加到陣列中。

if(!Arrays.asList(yourArr).contains(country)){ 
    yourArr[i] = country; 
    }