对n以内的数字进行字典序排序(java)

本文介绍了两种实现字典序排序的方法:一是通过重写比较器,二是利用字符串自然排序。这两种方法均可用于对整数列表进行排序,使之按字典序而非数值大小排序。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

刷题时,遇到的问题,目前是想到了两种方式:一种是重写比较器;另一种是使用字符串的表达方式,然后进行自然排序。

下面给出例子。


1、改写比较器方式

package schooloffer17;

import java.util.*;

/**
 * @Author: cxh
 * @CreateTime: 17/11/21 15:28
 * @ProjectName: JavaBaseTest
 * <字典排序></>
 */
public class DictionaryOrder {
    public static void main(String[] args) {
        int n,m;
        Scanner scanner=new Scanner(System.in);
        while (scanner.hasNextInt()){
            n=scanner.nextInt();//n个数字排序

            ArrayList<Integer> list=new ArrayList<Integer>();
            for(int i=0;i<n;i++)
                list.add(i+1);
            Collections.sort(list, new Comparator<Integer>() {
                @Override
                public int compare(Integer o1, Integer o2) {
                    String str1=String.valueOf(o1);
                    String str2=String.valueOf(o2);
                    if(str1.length()==str2.length()){
                        return (int)(o1-o2);//长度相同,升序
                    }else{
                        for(int i=0;i<Math.min(str1.length(),str2.length());i++){
                            if(str1.charAt(i)!=str2.charAt(i)){
                                return str1.charAt(i)-str2.charAt(i);
                            }
                        }
                        return str1.length()-str2.length();
                    }
                }
            });

            //输出list
            Iterator<Integer> iterator=list.iterator();
            while (iterator.hasNext()){
                System.out.println(iterator.next()+",");
            }
        }
    }
}
输入:15
输出结果:

1,
10,
11,
12,
13,
14,
15,
2,
3,
4,
5,
6,
7,
8,
9,



2、自然排序方式

package schooloffer17;

import java.util.*;

/**
 * @Author: cxh
 * @CreateTime: 17/11/21 15:28
 * @ProjectName: JavaBaseTest
 * <字典排序></>
 */
public class DictionaryOrder {
    public static void main(String[] args) {
        int n,m;
        Scanner scanner=new Scanner(System.in);
        while (scanner.hasNextInt()){
            n=scanner.nextInt();//n个数字排序

            ArrayList<String> list=new ArrayList<String>();
            for(int i=0;i<n;i++)
                list.add(String.valueOf(i+1));
            Collections.sort(list);

            //输出list
            Iterator<String> iterator=list.iterator();
            while (iterator.hasNext()){
                System.out.println(iterator.next()+",");
            }
        }
    }
}

输入:15

输出结果:

1,
10,
11,
12,
13,
14,
15,
2,
3,
4,
5,
6,
7,
8,
9,


3、其实改写比较器是常写的,自己比较熟悉,这次是对String类型的集合进行自然排序的第一次使用,原来String类型的集合自然排序是字典排序形式,这可能以后在刷题时候可以用到的一个方式呢。同时测试了数组类型为String,自然排序也是字典排序。只是写法两个不同而已,数组就是Arrays.sort(),而list集合是Collections.sort()。


### Java 中实现字典序排序Java 中,可以利用内置的 `String` 和 `List` 接口来轻松实现字典序排序。对于字符串列表而言,可以直接调用 `Collections.sort()` 方法来进行默认升序排序[^2]。 #### 使用 Collections.sort 对 List<String> 进行排序 ```java import java.util.ArrayList; import java.util.Collections; import java.util.List; public class DictionaryOrderSort { public static void main(String[] args) { List<String> words = new ArrayList<>(); words.add("banana"); words.add("apple"); words.add("orange"); // 默认情况下会按照字典顺序进行升序排列 Collections.sort(words); System.out.println(words); // 输出: [apple, banana, orange] } } ``` 为了自定义比较逻辑,比如降序或其他特定规则,则可以通过传递实现了 Comparator 接口的对象给 sort 函作为第二个参。 #### 自定义 Comparator 实现逆向字典序排序 ```java import java.util.Comparator; // 定义一个用于反转字符顺序的比较器 class ReverseDictionaryOrder implements Comparator<String> { @Override public int compare(String s1, String s2) { return s2.compareTo(s1); // 反转标准 compareTo 的行为 } } ... // 应用自定义比较器 Collections.sort(words, new ReverseDictionaryOrder()); System.out.println(words); // 假设输入 ["apple", "banana"], 则输出: [banana, apple] ``` 另外,在处理 Map 据结构时,若要依据 key 或 value 来做字典序排序,可先将其转换成 Set 形式的 entrySet() 集合再进一步操作[^4]。 #### 对 HashMap 按键值对中的 Key 进行字典序排序 ```java import java.util.HashMap; import java.util.LinkedHashMap; import java.util.Map; import java.util.stream.Collectors; Map<String, Integer> map = new HashMap<>(); map.put("zoo", 30); map.put("alpha", 10); // 将原始映射转化为按键排序后的链接哈希映射 Map<String, Integer> sortedByKey = map.entrySet() .stream() .sorted(Map.Entry.comparingByKey()) .collect(Collectors.toMap( Map.Entry::getKey, Map.Entry::getValue, (e1, e2) -> e1, LinkedHashMap::new)); System.out.println(sortedByKey); // 输出 {alpha=10, zoo=30} 表明已按key进行了字典序排序 ``` 上述代码片段展示了如何通过不同方式完成 Java 环境下的字典序排序任务,无论是简单的字符串组还是更复杂的关联容器如 Map 结构都能得到妥善解决。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值