所以我有一個國家的列表,我正在從一個文本文件中讀取一些國家在那裏不止一次。我需要把每個國家的名字都放進一個沒有任何雙打的字符串數組中,或者把國家放在那裏兩次。我試過使用for循環,但無法將我的頭圍繞所需的邏輯進行包裝。將只有唯一值加入數組的問題
在此先感謝。
所以我有一個國家的列表,我正在從一個文本文件中讀取一些國家在那裏不止一次。我需要把每個國家的名字都放進一個沒有任何雙打的字符串數組中,或者把國家放在那裏兩次。我試過使用for循環,但無法將我的頭圍繞所需的邏輯進行包裝。將只有唯一值加入數組的問題
在此先感謝。
嘗試使用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]
有三種不同的方法我可以看到這個工作:
使用一組。這是最有效和最簡單的,並且使用可運行的代碼。
每次讀入元素時,遍歷數組,並查看數組是否已經包含該元素。如果有,請不要添加它。如果你不能使用Sets,這是最簡單的代碼。
讀入所有元素,對數組進行排序。遍歷數組,如果當前元素不等於前一個元素,則將其添加到新數組中。這比#2(O(nlog(n))
vs O(n^2)
)更有效,但需要更多的代碼。
爲了檢查國家是否在數組中,使用if語句。正如你在每個國家讀到的一樣,這個檢查是否存在於數組中。如果沒有,它會將國家添加到陣列中。
if(!Arrays.asList(yourArr).contains(country)){
yourArr[i] = country;
}
你可以使用'Set'並節省一些努力。 –
@RohitJain你能解釋一下嗎?我不知道一套是什麼 – user3002906
@ user3002906你自己試着用谷歌搜索「Java Set」嗎?互聯網上有豐富的知識。 –