java - 使用带有自定义比较器的优先级队列根据字符串中的单词数进行排序?

标签 java string sorting priority-queue cpu-word

我正在尝试使用优先级队列根据每个字符串中有多少个单词(空格)对字符串进行排序。我的代码仅在某些场景下有效,但当每个字符串的空格数量真正分散时则不起作用。我想是因为我的方法没有对它们进行全部比较。

Comparator<String> whiteSpaces = new Comparator<String>() {
        int count1 = 0;
        int count2 = 0;
        char c = ' ';
        @Override
        public int compare(String s1, String s2) {
            for(int i = 0; i < s1.length(); i++) {
                if(s1.charAt(i) == c){
                    count1++;
                }
            }
            for(int i = 0; i < s2.length(); i++) {
                if(s2.charAt(i) == c) {
                    count2++;
                }
            }
            return count1 - count2;
        }
    };

我可以修改我所拥有的内容,以便它与添加到优先级队列中的所有字符串进行比较吗?提前致谢。

最佳答案

由于您未在调用之间将 count1count2 重置为 0比较器 无法工作到compare()

实际上,问题在于 count1count2 是字段。它们应该是局部变量。

count1count2 声明移至方法中。

Comparator<String> whiteSpaces = new Comparator<String>() {
    char c = ' ';
    @Override
    public int compare(String s1, String s2) {
        int count1 = 0;
        int count2 = 0;
        for(int i = 0; i < s1.length(); i++) {
            if(s1.charAt(i) == c){
                count1++;
            }
        }
        for(int i = 0; i < s2.length(); i++) {
            if(s2.charAt(i) == c) {
                count2++;
            }
        }
        return count1 - count2;
    }
};

其他改进:

  • 字段c应该是privatefinal,并且命名得更好。

  • 创建一个辅助方法来消除重复的代码。

  • 使用Integer.compare(a, b)代替减法。

Comparator<String> whiteSpaces = new Comparator<String>() {
    private final char separator = ' ';
    @Override
    public int compare(String s1, String s2) {
        return Integer.compare(countSeparators(s1), countSeparators(s2));
    }
    private int countSeparators(String s) {
        int count = 0;
        for (int i = 0; i < s.length(); i++) {
            if (s.charAt(i) == separator) {
                count++;
            }
        }
        return count;
    }
};

关于java - 使用带有自定义比较器的优先级队列根据字符串中的单词数进行排序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61089048/

相关文章:

c++ - 关于代码的一些优化(计算 vector 的排名)?

javascript - 键:value pairs in javascript的排序字典

google-app-engine - 如何在 GAE Go 中对 slice 进行排序

java - 上传后检查文件类型

java - 更改字体大小并在 JOptionPane 中的按钮之间留出空间

java - 使用java在同一浏览器中打开新选项卡

string - 等于后缀的前缀数

java - 两个按钮导致相同的 Activity

c - 在 C 中删除 URL 中的单点路径名

ios - 解开分段字符串时发生 fatal error (swift3)