You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Java如何实现按a到z字母出现次数优先级对对象的name属性排序

自定义排序逻辑实现方案

以下以Java语言为例,其他语言核心逻辑通用:

核心思路

自定义排序比较器,按a到z的顺序依次比对两个对象name字段对应字母的出现次数,某一字母次数更高的对象直接排在前面,第一次出现次数差异就终止比较返回结果。

代码实现

假设你已定义的实体类为MyObject,包含name属性及对应的getName getter方法:

import java.util.Arrays;
import java.util.Comparator;

public class SortDemo {
    public static void main(String[] args) {
        // 你已经构造完成的对象数组,这里仅做示例
        MyObject[] objArray = {
            new MyObject("abacus"),
            new MyObject("banana"),
            new MyObject("cat")
        };

        // 执行自定义排序
        Arrays.sort(objArray, new Comparator<MyObject>() {
            @Override
            public int compare(MyObject o1, MyObject o2) {
                String name1 = o1.getName();
                String name2 = o2.getName();
                // 从a到z依次比对字符出现次数
                for (char c = 'a'; c <= 'z'; c++) {
                    int cnt1 = countCharOccur(name1, c);
                    int cnt2 = countCharOccur(name2, c);
                    if (cnt1 != cnt2) {
                        // 次数高的排前面,返回差值即可
                        return cnt2 - cnt1;
                    }
                }
                // 题目保证不会出现所有字母次数一致的场景,此处仅做兼容返回
                return 0;
            }

            // 统计单个字符在字符串中的出现次数
            private int countCharOccur(String str, char target) {
                int count = 0;
                for (char ch : str.toCharArray()) {
                    if (ch == target) count++;
                }
                return count;
            }
        });

        // 排序后可直接使用objArray
    }
}

性能优化建议(大数据量场景适用)

如果待排序数组规模大、重复字符串多,可以提前给每个对象预计算a-z的字符频率数组缓存,避免排序过程中反复统计相同字符串的字符次数,降低时间复杂度。

内容的提问来源于stack exchange,提问作者Ameer

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.26 13:06:10