2014-01-28 109 views
1

我学校的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]); 

我将不胜感激任何反馈。

非常感谢, 朱奈德

+0

http://ideone.com/ –

+0

“我学校compsci网站上的测试程序无法正常工作,所以我目前无法测试我的代码”所以,它不是编译器的替代品。 – Raedwald

+6

这个问题似乎是无关紧要的,因为OP没有热情或专业知识来检查他们的代码是否编译。 – Raedwald

回答

1

1)这是行有效的Java代码?或者,我是否需要通过某些循环使用来创建词典中包含的值列表?

这很好。 Map#values()返回Collection,而ArrayListconstructor,允许您将Collection传递给它。

2)为了使我不包括在第二个for循环相同的字,我创建一个名为oneLessWord新的数组,其具有词语的所有元件,除了对于循环初期会在字。这三行代码是否这样做?

是的,他们正是这样做的。

+0

感谢帮助! – user2904796