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
相关产品推荐
相关产品推荐

