Java Hashmap问题。

时间:2014-01-28 12:09:47

标签: java arraylist hashmap

我学校的compsci网站上的测试人员无法正常工作,所以我目前无法测试我的代码。代码中有两个区域我有些困惑,并且非常感谢一些输入。所以我写的代码如下。

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循环for for循环的单词。这三行代码是这样做的吗?

java.util.List<String> list = new ArrayList<String>(Arrays.asList(words));

list.remove(word);

String[] oneLessWord = list.toArray(new String[words.length-1]);

我将不胜感激。

非常感谢, Junaid

1 个答案:

答案 0 :(得分:1)

  

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

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

  

2)为了不在第二个for循环中包含相同的单词,我创建了一个名为oneLessWord的新数组,该数组包含所有单词元素,除了for循环for for循环的单词。这三行代码是这样做的吗?

是的,他们就是这么做的。