我學校的compsci網站上的測試儀不工作,所以我目前無法測試我的代碼。代碼中有兩個領域我有點困惑,並且非常感謝一些輸入。所以我寫的代碼如下。Java哈希表映射問題。
public int countPairs(String[] words) {
Set <String> pairs = new HashSet<String>();
int noOfPairs= 0;
for (String word:words){
Map noOfOccurencesOfEachLetter= getMap(word);
ArrayList<Integer> valuesFromFirstWord = new ArrayList<Integer>(noOfOccurencesOfEachLetter.values());
Collections.sort(valuesFromFirstWord);
java.util.List<String> list = new ArrayList<String>(Arrays.asList(words));
list.remove(word);
String[] oneLessWord = list.toArray(new String[words.length-1]);
for(String secondWord:oneLessWord){
Map secondNoOfOccurencesOfEachLetter = getMap(secondWord);
ArrayList<Integer> valuesFromSecondWord = new ArrayList<Integer>(secondNoOfOccurencesOfEachLetter.values());
Collections.sort(valuesFromSecondWord);
if (valuesFromFirstWord.equals(valuesFromSecondWord)){
noOfPairs+=1;
}
}
}
return noOfPairs/2;
}
此代碼旨在給我數組(單詞)中存在的單詞的異構對數。我寫了一個名爲getMap
的方法,其外部基本上創建一個映射,其中鍵是包含在單詞中的字母表中的字母,並且值是該單詞中該字母的出現次數。
現在我的問題是:
1)該行是否爲有效的Java代碼?
ArrayList<Integer> valuesFromFirstWord = new ArrayList<Integer>
(noOfOccurencesOfEachLetter.values());
或者我是否需要通過一些循環使用來創建我的字典中包含的值列表?
2)爲了避免在第二個for循環中包含相同的單詞,我創建了一個名爲oneLessWord的新數組,其中包含除初始for循環所經過的單詞之外的所有單詞元素。這三行代碼是否這樣做?
java.util.List<String> list = new ArrayList<String>(Arrays.asList(words));
list.remove(word);
String[] oneLessWord = list.toArray(new String[words.length-1]);
我將不勝感激任何反饋。
非常感謝, 朱奈德
http://ideone.com/ –
「我學校compsci網站上的測試程序無法正常工作,所以我目前無法測試我的代碼」所以,它不是編譯器的替代品。 – Raedwald
這個問題似乎是無關緊要的,因爲OP沒有熱情或專業知識來檢查他們的代碼是否編譯。 – Raedwald