小编Adw*_*dwo的帖子

计算数组中单词的出现次数

我一直致力于处理一些字符流,形成单词,创建单词数组,然后创建一个包含每个唯一单词及其出现次数的向量(基本上是单词计数器).

无论如何,我很长一段时间没有使用Java,或者说实话编程很多,我对目前看来并不满意.我所拥有的部分使得矢量看起来很难看,我想知道我是否可以减少它的混乱.

    int counter = 1;
    Vector<Pair<String, Integer>> finalList = new Vector<Pair<String, Integer>>();
    Pair<String, Integer> wordAndCount = new Pair<String, Integer>(wordList.get(1), counter); // wordList contains " " as first word, starting at wordList.get(1) skips it.

    for(int i= 1; i<wordList.size();i++){
        if(wordAndCount.getLeft().equals(wordList.get(i))){
            wordAndCount = new Pair<String, Integer>(wordList.get(i), counter++);
        }
        else if(!wordAndCount.getLeft().equals(wordList.get(i))){
            finalList.add(wordAndCount);
            wordAndCount = new Pair<String, Integer>(wordList.get(i), counter=1);
        }
    }
    finalList.add(wordAndCount); //UGLY!!
Run Code Online (Sandbox Code Playgroud)

作为次要问题,这给了我一个矢量,其中所有单词都按字母顺序排列(如数组中所示).我希望按事件排序,按字母顺序排列.

最好的选择是:

  • 迭代向量,用上面的那个测试每个出现int,Collections.swap()如果它更高,则检查上面的下一个(因为它现在向上移动1),依此类推,直到它不再大于它上面的任何东西.可以跳过任何出现的1.

  • 再次向下迭代向量,针对向量的第一个元素测试每个元素,然后向下迭代,直到出现次数较低并将其插入该元素上方.将再次跳过所有出现的1.

第一种方法在迭代元素方面会做得更多,但第二种方法需要你添加和删除向量的组件(我认为?)所以我不知道哪个更有效,或者是否值得考虑.

java arrays vector

0
推荐指数
1
解决办法
1464
查看次数

标签 统计

arrays ×1

java ×1

vector ×1