Java实现字符串排序的几种方式

创建实体类(此处引入了lombok)

@Data
@AllArgsConstructor
@NoArgsConstructor
public class Test{
    private int Id;
    private String TestNo;
}

一、使用List集合中自带的sort方法(字符串的位数保持一致,不一致的情况可以在左边补0,也可以使用String.format()方法补全)

1、在对象排序中使用

public static void main(String[] args) {
        List<Test> testList= new ArrayList<>();
        testList.add(1,"22");
        testList.add(2,"11");
        testList.add(3,"44");
        testList.add(4,"33");
        list.sort((a,b)->a.getTestNo().compareTo(b.getTestNo()));
}

2、在字符串排序中使用

public static void main(String[] args) {
        List<String> testList= new ArrayList<>();
        testList.add("22");
        testList.add("11");
        testList.add("44");
        testList.add("33");
        list.sort(String::compareTo);
}

二、使用Stream流(字符串的位数保持一致,不一致的情况可以在左边补0,也可以使用String.format()方法补全)

1、在对象排序中使用

public static void main(String[] args) {
        List<Test> testList= new ArrayList<>();
        testList.add(1,"22");
        testList.add(2,"11");
        testList.add(3,"44");
        testList.add(4,"33");
        List<Test> sortList = testList.stream().sorted(Comparator.comparing(Test::getTestNo).collect(Collectors.toList());
}

2、在字符串排序中使用

public static void main(String[] args) {
        List<String> testList= new ArrayList<>();
        testList.add("22");
        testList.add("11");
        testList.add("44");
        testList.add("33");
        List<String> collect = testList.stream().sorted(Comparator.comparing(Objects::toString)).collect(Collectors.toList());
}

三、使用基数排序(此处仅展示对字符串进行排序,不需要补全位数)

class Quick3string{
	//三向字符串快速排序
	private static int charAt(String s, int d) {
		if(d < s.length()) {
			return s.charAt(d);
		}
		return -1;
	}
    
	public static void sort(String[] a) {
		sort(a, 0, a.length - 1, 0);
	}
    
	private static void sort(String[] a, int lo, int hi, int d) {
		if(hi <= lo) {
			return;
		}
		int lt = lo, gt = hi, i = lo + 1;
		int v = charAt(a[lo], d);
		while(i <= gt) {
			int t = charAt(a[i], d);
			if(t < v) {
				exch(a, lt++, i++);
			}else if(t > v) {
				exch(a, i, gt--);
			}else {
				i++;
			}
		}
		//a[lo..lt-1] < v = a[lt..gt] < a[gt+1..hi]
		sort(a, lo, lt - 1, d);
		if(v >= 0) {
			sort(a, lt, gt, d + 1);
		}
		sort(a, gt + 1, hi, d);
	}
    
	private static void exch(String[] a, int i, int j) {
		String t = new String(a[i]);
		a[i] = a[j];
		a[j] = t;
	}

	public static void main(String[] args) {
		String[] a = {"48328458C70490693231303331361020", "48326E48E1136A9E3139313131301020", "48326E48E1176F8A3139313131311020", "48326E48E12474713139313131311020"};
		Quick3string.sort(a);
		System.out.println(Arrays.toString(a));
	}

}

  • 3
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
Java编程考试常出现的题型包括以下几种: 1. 字符串操作题:要求学生实现字符串的常见操作,比如字符串的拼接、反转、替换、查找等。此类题目考察学生对字符串的基本掌握程度以及对字符串操作方法的熟练度。 2. 线性表、栈、队列和链表题:考察学生对这些数据结构的理解和熟练应用能力,比如实现这些数据结构的基本操作、应用场景分析等。 3. 树结构题:要求学生实现二叉树的遍历、查找等操作,或者实现树的相关算法,比如构建哈夫曼树等。 4. 排序算法题:要求学生实现常见的排序算法,比如冒泡排序、快速排序、堆排序、归并排序等,并分析其时间复杂度。 5. 查找算法题:要求学生实现常见的查找算法,比如二分查找、哈希查找等,并分析其时间复杂度。 6. 分治算法题:要求学生实现常见的分治算法,比如归并排序、快速排序等,并分析其时间复杂度。 以下是一些示例题目及其答案: 1. 字符串操作题: 题目:将一个字符串中所有的空格替换为"%20"。 答案:可以先遍历字符串,记录空格的数量,然后计算出替换后的字符串长度,从后向前进行替换。 2. 线性表题: 题目:实现一个栈,要求支持入栈、出栈和获取栈顶元素的操作。 答案:可以使用数组或链表来实现栈,入栈操作即在栈顶插入元素,出栈操作即从栈顶删除元素,获取栈顶元素操作即返回栈顶元素。 3. 树结构题: 题目:实现一个二叉树的前序遍历。 答案:前序遍历的顺序是根节点、左子树、右子树。可以使用递归或者栈来实现前序遍历。 4. 排序算法题: 题目:实现一个快速排序算法。 答案:快速排序的基本思路是选择一个基准元素,将小于基准元素的数放在其左边,大于基准元素的数放在其右边,然后对左右两部分分别递归进行快速排序。时间复杂度为O(nlogn)。 5. 查找算法题: 题目:实现一个二分查找算法。 答案:二分查找的基本思路是将数组分成左右两部分,若查找元素小于中间元素,则在左半部分继续查找,否则在右半部分查找,直到找到或者查找区间为空。时间复杂度为O(logn)。 希望这些信息能够对你有所帮助,祝你考试顺利!

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值