【问题标题】:Sorting strings in a list based on indexes根据索引对列表中的字符串进行排序
【发布时间】:2025-11-22 20:20:07
【问题描述】:

如果我有一个 ArrayList 的字符串 ["bb", "ab", "cf", "aa"] 如何按第一个或第 n 个索引及以后的字母顺序排序(如果第一个索引与其他字符串的字符相同)?有没有我可以使用的方法?

上面的列表,我希望 index = 1

["aa", "bb", "ab", "cf"]

另一个例子

["bab", "baa", "abbe", "cff"] 会返回

["baa", "bab", "abbe", "cff"]

【问题讨论】:

  • How to use Comparator in Java to sort 的可能重复项(附注:不是反对者)
  • 它不是正确的 java 字符串
  • 通过使用比较器提取两个字符串的第 n 个字符并进行比较。至少尝试一下。

标签: java string sorting arraylist


【解决方案1】:

您可以使用Comparator.comparingInt 执行此排序:

使用索引0 对数组进行排序:

String[] s = {"bb", "ab", "cf", "aa"};
Arrays.sort(s, Comparator.comparingInt(s1 -> s1.charAt(0)));
Arrays.asList(s).forEach(System.out::println);

或排序列表:

List<String> s = Arrays.asList("bb", "ab", "cf", "aa");
s.sort(Comparator.comparingInt(s2 -> s2.charAt(0)));
s.forEach(System.out::println);

输出:

ab
aa
bb
cf

否则使用索引1 对数组进行排序:

String[] s = {"bb", "ab", "cf", "aa"};
Arrays.sort(s, Comparator.comparingInt(s2 -> s2.charAt(1)));
Arrays.asList(s).forEach(System.out::println);

或索引 1 用于排序列表

List<String> s = Arrays.asList("bb", "ab", "cf", "aa");  
s.sort(Comparator.comparingInt(s2 -> s2.charAt(1)));
s.forEach(System.out::println);

输出:

aa
bb
ab
cf

PS:你质疑java,但你的stringsarray喜欢javascript..

【讨论】:

    【解决方案2】:

    看看这个简单的例子:

     public static void main(String[] args) {
            List<String> listOfStrings = new LinkedList<>();
            listOfStrings.add("aa");
            listOfStrings.add("bb");
            listOfStrings.add("ge");
            listOfStrings.add("be");
            System.out.println(Arrays.asList(listOfStrings));
            String getMe = listOfStrings.remove(3);
            listOfStrings.add(0, getMe);
            System.out.println(Arrays.asList(listOfStrings));
        }
    

    LinkedList 适合插入和删除元素,这可以在 O(1) 中完成(在本地更改),我还想提一下,添加或删除列表的头部也在 O(1) 中完成这最适合您的事业。

    【讨论】: