Java语言排序比较函数及代码示例

举报
zhushy 发表于 2021/11/18 21:14:00 2021/11/18
【摘要】 Java语言排序比较函数及代码示例 1、字符串比较Java String类实现了compareTo接口,可用于两个字符串的比较(基于字典序),用法为str1.compareTo(str2),返回一个整数值。按字典序str1等于str2字符串时,返回0按字典序str1小于str2时,返回值小于0,按字典序str1大于str2时,返回值大于0。the value is equal to {@c...

Java语言排序比较函数及代码示例

1、字符串比较

Java String类实现了compareTo接口,可用于两个字符串的比较(基于字典序),用法为str1.compareTo(str2),返回一个整数值。

  • 按字典序str1等于str2字符串时,返回0
  • 按字典序str1小于str2时,返回值小于0,
  • 按字典序str1大于str2时,返回值大于0。
the value is equal to {@code 0} if the argument string is equal to this string;
a value less than {@code 0} if this string is lexicographically less than the string argument; 
and a value greater than {@code 0} if this string is lexicographically greater than the string argument.

2、字符串序列排序

sort 函数可用于字符串序列的排序,默认按字典序升序排序。基于sort函数有多种方式可以实现降序排序,存储字符串可用List或Array。

List Array
调用String类的compareTo接口自行实现比较函数 Y Y
Collections.reverseOrder() 或 Comparator.reverseOrder() Y Y
利用stream Y Y
sort()升序 + reverse()反转 Y Y
import java.util.Arrays;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;
import java.util.stream.Collectors;

public class SortDemos {

	public static void main(String[] args) {

		final String str1 = "abc";
		final String str2 = "bcd";
		System.out.println("字典序低的字符串与字典序高的字符串比较:" + str1.compareTo(str2));
		System.out.println("字典序高的字符串与字典序低的字符串比较:" + str2.compareTo(str1));

		String[] arr = { "apple", "xiaomi", "huawei", "163", "8848" };

		// #########################################################
		// List.sort()-自行实现比较函数
		List<String> list = Arrays.asList(arr);
		// 升序 o1是发起比较的元素、要加入列表的元素,o2是现有列表的元素
		list.sort((o1, o2) -> o1.compareTo(o2));
		System.out.println("List.sort()-自行实现比较函数 升序:" + list);
		// 降序
		list.sort((o1, o2) -> o2.compareTo(o1));
		System.out.println("List.sort()-自行实现比较函数 降序:" + list);

		// List.sort()-Collections.reverseOrder()
		list = Arrays.asList(arr);
		list.sort(Collections.reverseOrder());
		System.out.println("List.sort()-Collections.reverseOrder():" + list);

		// List.sort()-Comparator.reverseOrder()
		list = Arrays.asList(arr);
		list.sort(Comparator.reverseOrder());
		System.out.println("List.sort()-Comparator.reverseOrder():" + list);

		// List.sort()-stream
		list = Arrays.asList(arr);
		List<String> list2 = list.stream().sorted(Comparator.reverseOrder()).collect(Collectors.toList());
		System.out.println("List.sort()-stream:" + list2);

		// List.sort()-sort升序+reverse反转
		list = Arrays.asList(arr);
		System.out.println("List.sort()-原生:" + list);
		Collections.sort(list);
		System.out.println("List.sort()-sort升序:" + list);
		Collections.reverse(list);
		System.out.println("List.sort()-reverse反转:" + list);

        // #########################################################
		// Array排序-比较函数
		// 字典序降序排序,如果升序改为 第二个参数改为 o1.compareTo(o2)即可
		Arrays.sort(arr, (o1, o2) -> o2.compareTo(o1));
		System.out.println("数组字典序排序:" + Arrays.toString(arr));
		// 字典序降序升序
		Arrays.sort(arr, (o1, o2) -> o1.compareTo(o2));
		System.out.println("数组字典序升序:" + Arrays.toString(arr));
	}
}

输出如下:

字典序低的字符串与字典序高的字符串比较:-1
字典序高的字符串与字典序低的字符串比较:1
List.sort()-自行实现比较函数 升序:[163, 8848, apple, huawei, xiaomi]
List.sort()-自行实现比较函数 降序:[xiaomi, huawei, apple, 8848, 163]
List.sort()-Collections.reverseOrder()[xiaomi, huawei, apple, 8848, 163]
List.sort()-Comparator.reverseOrder()[xiaomi, huawei, apple, 8848, 163]
List.sort()-stream:[xiaomi, huawei, apple, 8848, 163]
List.sort()-原生:[xiaomi, huawei, apple, 8848, 163]
List.sort()-sort升序:[163, 8848, apple, huawei, xiaomi]
List.sort()-reverse反转:[xiaomi, huawei, apple, 8848, 163]
数组字典序排序:[xiaomi, huawei, apple, 8848, 163]
数组字典序升序:[163, 8848, apple, huawei, xiaomi]

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。