Java 按字母排列排序

Java 按字母排列排序,java,algorithm,sorting,alphabetical-sort,Java,Algorithm,Sorting,Alphabetical Sort,我正在尝试实现一种排序算法,它根据给定的字母排列对单词列表进行排序。(例如,如果给定排列“zyxwvutsrqponmlkjihgfedcba”和单词列表“ant,bear,cat,zoo,animal”,我的算法将返回“zoo,cat,bear,ant,animal”),我可以想出一种方法,将单词的每个字母与另一个单词的字母进行比较,但这会花费很长时间。是否有一种优化的方法来实现此算法,以便更快地对单词进行排序?您可以使用HashMap实现自定义比较器: import java.util.*;

我正在尝试实现一种排序算法,它根据给定的字母排列对单词列表进行排序。(例如,如果给定排列“zyxwvutsrqponmlkjihgfedcba”和单词列表“ant,bear,cat,zoo,animal”,我的算法将返回“zoo,cat,bear,ant,animal”),我可以想出一种方法,将单词的每个字母与另一个单词的字母进行比较,但这会花费很长时间。是否有一种优化的方法来实现此算法,以便更快地对单词进行排序?

您可以使用HashMap实现自定义比较器:

import java.util.*;

public class Main {
    public static class PermutationComparator implements Comparator<String> {
        private final Map<Character, Integer> order;

        public PermutationComparator(String permutation) {
            this.order = new HashMap<Character, Integer>();
            for (int i = 0; i < permutation.length(); i++) {
                order.put(permutation.charAt(i), i);
            }
        }

        private int getOrder(char c) {
            Integer value = order.get(c);
            if (value == null) return -1;
            return value;
        }

        @Override
        public int compare(String o1, String o2) {
            for (int i = 0; i < Math.min(o1.length(), o2.length()); i++) {
                int compare = Integer.compare(getOrder(o1.charAt(i)), getOrder(o2.charAt(i)));
                if (compare != 0) return compare;
            }
            return Integer.compare(o1.length(), o2.length());
        }
    }

    public static void main(String... args) {
        String[] strings = {"ant", "bear", "cat", "zoo", "animal"};
        Arrays.sort(strings, new PermutationComparator("zyxwvutsrqponmlkjihgfedcba"));
        System.out.println(Arrays.toString(strings));
    }
}
如果希望不区分大小写,请使用:

Integer value = order.get(Character.toLowerCase(c));

首先尝试一下……据我所知,您可以使用hashmap保存以前的进程,以避免再次计算以前的进程检查
String.compareTo()的实现方式,并用自定义权重替换字符代码
Integer value = order.get(Character.toLowerCase(c));