前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >java中sort排序_数据结构算法总结

java中sort排序_数据结构算法总结

作者头像
全栈程序员站长
发布2022-09-21 11:29:57
3560
发布2022-09-21 11:29:57
举报
文章被收录于专栏:全栈程序员必看

大家好,又见面了,我是你们的朋友全栈君。

数组Sort排序

正序排序:Arrays.sort(array),会检查数组个数大于286且连续性好就使用归并排序,若小于32使用插入排序,其余情况使用快速排序

代码语言:javascript
复制
int[] array = { 
     10, 3, 6, 1, 4, 5, 9};
Arrays.sort(array);

降序排序:先将数组Arrays.asList()转为集合,然后使用Collections.reverse()反转集合,注意如果是基础数据类型(不是数据包装类),不能使用Arrays.asList()方法可以使用Guava的Ints.asList()方法代替

代码语言:javascript
复制
Integer[] array = { 
     10, 3, 6, 1, 4, 5, 9};
Arrays.sort(array);
List<Integer> list = Arrays.asList(array);
Collections.reverse(list);//冒泡 交换

简单集合Sort排序

说明:主要是对jdk类库中的包装类排序,例如:Integer、String等,这些类都已经重写了Compare方法,都有默认排序规则

常规方式

代码语言:javascript
复制
List<Integer> list = new ArrayList<Integer>(Arrays.asList(10, 3, 6, 1, 4, 5, 9));
// 升序
Collections.sort(list);
// 降序
Collections.sort(list, Collections.reverseOrder());

lambda方式

代码语言:javascript
复制
// 升序
List<Integer> collect = list.stream().sorted().collect(Collectors.toList());
// 降序
List<Integer> collect = list.stream().sorted(Comparator.reverseOrder()).collect(Collectors.toList());

lists.sort((o1,o2)->o1.getAge()-o2.getAge());
lists.sort(Comparator.comparing(Person::getAge).reversed().thenComparing(Person::getName));

对象集合Sort排序

lambda方式:排序值不能为null

代码语言:javascript
复制
//方法二:使用stream sorted方法 
 list=list.stream().sorted((s2,s1 )->s1.getShowOrder().compareTo(s2.getShowOrder())).collect(Collectors.toList());
//方法三:使用jdk8的sort方法
 list.sort((s2,s1)->s1.getShowOrder().compareTo(s2.getShowOrder()));
//方法四:总结
    Arrays.sort(array, (v1, v2) -> v1[0] - v2[0]);
    Collections.sort(list, (o1,o2)->o1[0]-o2[0]);
    list.sort((o1, o2) -> o1[0] - o2[0]);

Comparable方式:在实体中实现Comparable<实体>接口,重写compareTo方法,缺点不灵活

代码语言:javascript
复制
public class Student implements Comparable<Student> { 
     
	private String name;
	private Integer age;

	public int compareTo(StudentAsc o) { 
     
  		if(null == this.age) { 
     
      		return -1;
  		}
  		if(null == o.getAge()) { 
     
      		return 1;
  		}
  		return this.age.compareTo(o.getAge());
	}
}

Comparator方式:使用Collections.sort(List list, Comparator<? super T> c)方法来实现相对上面来说灵活很多

代码语言:javascript
复制
Collections.sort(students, new Comparator<Student>() { 
     
 	public int compare(Student o1, Student o2) { 
     
    	if(null == o1.getAge()) { 
     
        	return -1;
    	}
   	 	if(null == o2.getAge()) { 
     
        	return 1;
   	 	}
   	 	return o1.getAge().compareTo(o2.getAge());
 	}
});

Sort方法详解(待补充)

说明:Collections.sort方法底层就是调用的array.sort方法,根据数据大小的不同会使用插入排序、归并排序、快速排序(后两种排序算法都是分治思想)

参考: https://blog.csdn.net/whp1473/article/details/79678974 https://blog.csdn.net/MrLiar17/article/details/89188038

发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/169884.html原文链接:https://javaforall.cn

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档