java List的排序
List自定义排序
1、第一种方法,就是list中对象实现Comparable接口,重写compareTo接口, 对排序的字段进行比较。
2、第二种方法,就是在重载Collections.sort方法。
代码示例
package com.xmy.list.sort; import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List; /**
* description:list排序
* Created with IDEA
* User:xmy
* Date:2016/10/14
* Time:10:10
*/
public class ListMain { public static void main(String[] args) {
comparePersonOrder();
compareStudentOrder();
compareStudentOrder2();
} /**
* 重载Collections.sort
*/
public static void compareStudentOrder2(){
List<Student> listA = new ArrayList<Student>();
listA.add(new Student("name2", 2));
listA.add(new Student("name1", 1));
listA.add(new Student("name3", 3)); Collections.sort(listA, new Comparator<Student>() {
@Override
public int compare(Student o1, Student o2) {
return o1.getOrder().compareTo(o2.getOrder());
}
}); System.out.println("**********升序**********");
for (Student s : listA) {
System.out.println(s);
}
} /**
* 重载Collections.sort
*/
public static void compareStudentOrder(){
List<Student> listA = new ArrayList<Student>();
listA.add(new Student("name2", 2));
listA.add(new Student("name1", 1));
listA.add(new Student("name3", 3)); System.out.println("**********升序**********");
//升序
Collections.sort(listA, new SortNum());
for (Student s : listA) {
System.out.println(s);
}
//降序
System.out.println("**********降序**********");
Comparator result = Collections.reverseOrder(new SortNum());
Collections.sort(listA,result);
for (Student s : listA) {
System.out.println(s);
} } /**
* Person实现Comparable接口
*/
public static void comparePersonOrder(){
List<Person> listA = new ArrayList<Person>();
listA.add(new Person("name2", 2));
listA.add(new Person("name1", 1));
listA.add(new Person("name3", 3));
//升序
Collections.sort(listA);
System.out.println("**********升序**********");
for (Person p : listA) {
System.out.println(p);
}
//降序
Collections.reverse(listA);
System.out.println("**********降序**********");
for (Person p : listA) {
System.out.println(p);
}
} } /**
* 比较器类
*/
class SortNum implements Comparator{
@Override
public int compare(Object o1, Object o2){
Student s1 = (Student)o1;
Student s2 = (Student)o2;
return s1.getOrder() - s2.getOrder();
}
} class Student { private String name;
private Integer order; public Student(String name, Integer order){
this.name = name;
this.order = order;
} public String getName() {
return name;
} public void setName(String name) {
this.name = name;
} public Integer getOrder() {
return order;
} public void setOrder(Integer order) {
this.order = order;
} @Override
public String toString() {
return "Student{" +
"name='" + name + '\'' +
", order=" + order +
'}';
}
} class Person implements Comparable<Person> { private String name;
private Integer order; @Override
public String toString() {
return "Person{" +
"order=" + order +
", name='" + name + '\'' +
'}';
} public Person(String name, Integer order){
this.name = name;
this.order = order;
} public String getName() {
return name;
} public void setName(String name) {
this.name = name;
} public Integer getOrder() {
return order;
} public void setOrder(Integer order) {
this.order = order;
} @Override
public int compareTo(Person arg0) {
return this.getOrder().compareTo(arg0.getOrder());
} }
对复合数据类型的数据的排序
package com.xmy.list.sort; import java.util.Arrays;
import java.util.Comparator; /**
* description:
* Created with IDEA
* User:xmy
* Date:2016/11/14
* Time:15:55
*/
public class ArrayTest { public static void main(String[] args) {
compareOrder();
} /**
* 排序
*/
public static void compareOrder(){
Point[] points = new Point[4];
for(int i=0;i<4;i++)
points[i]=new Point();
//初始化数据
points[0].order_1=2;points[0].order_2=1;
points[1].order_1=2;points[1].order_2=2;
points[2].order_1=1;points[2].order_2=2;
points[3].order_1=0;points[3].order_2=1;
//自定义排序
Arrays.sort(points, new MyComprator());
//输出排序结果
for(int i=0;i<4;i++)
System.out.println("排序后("+points[i].order_1+","+points[i].order_2+")");
} } class Point{
int order_1;
int order_2;
} /**
* 比较器类
*/
class MyComprator implements Comparator {
public int compare(Object arg0, Object arg1) {
Point point_1 = (Point)arg0;
Point point_2 = (Point)arg1;
//优先按order_1进行升序排列
if(point_1.order_1 != point_2.order_1)
return point_1.order_1 > point_2.order_1 ? 1:-1;
//再按order_2进行升序排列
else
return point_1.order_2 > point_2.order_2 ? 1:-1;
}
}
List默认排序
/**
* 默认list排序方法
*/
public static void sortList(){
List<String> list = new ArrayList();
list.add("赵");
list.add("钱");
list.add("孙");
list.add("李");
list.add("周"); //注意:是根据的汉字的拼音的字母排序的,而不是根据汉字一般的排序方法
System.out.println("**********升序**********");
Collections.sort(list,Collator.getInstance(Locale.CHINA));
for(String temp : list){
System.out.println(temp);
}
System.out.println("**********降序**********");
Collections.reverse(list);
for(String temp : list){
System.out.println(temp);
}
}
数组的排序
1、int[],double[],char[]等基数据类型的数组,Arrays类之只是提供了默认的升序排列
/**
* 默认数组排序方法
*/
public static void sortArray(){
String[] names = {"赵", "钱", "孙", "李", "周"};
System.out.println("排序前:" + Arrays.toString(names));
//Arrays.sort(names); 排序无效
Arrays.sort(names, Collator.getInstance(Locale.SIMPLIFIED_CHINESE));//升序;
System.out.println(" 升序:" + Arrays.toString(names)); Integer[] ages = {5,7,2,8,1};
System.out.println("排序前:" + Arrays.toString(ages));
Arrays.sort(ages);
System.out.println(" 升序:" + Arrays.toString(ages));
}
枚举类型的排序
对于枚举类型的enum1.compareTo(enum2)是按照枚举类型值在定义时的先后顺序比较的,越后面的越大,跟值的字母先后顺序无关。
java List的排序的更多相关文章
- Java中的排序算法(2)
Java中的排序算法(2) * 快速排序 * 快速排序使用分治法(Divide and conquer)策略来把一个序列(list)分为两个子序列(sub-lists). * 步骤为: * 1. 从数 ...
- Java实现常见排序算法
常见的排序算法有冒泡排序.选择排序.插入排序.堆排序.归并排序.快速排序.希尔排序.基数排序.计数排序,下面通过Java实现这些排序 1.冒泡排序 package com.buaa; import j ...
- Comparable与Comparator,java中的排序与比较
1:比较和排序的概念 比较:两个实体类之间按>,=,<进行比较. 排序:在集合类中,对集合类中的实体进行排序.排序基于的算法基于实体类提供的比较函数. 基本型别都提供了默认的比较算法,如s ...
- Java之List排序出错
Java之List排序出错 Bound mismatch: The generic method sort(List<T>) of type Collections is not appl ...
- Java进阶(三十九)Java集合类的排序,查找,替换操作
Java进阶(三十九)Java集合类的排序,查找,替换操作 前言 在Java方向校招过程中,经常会遇到将输入转换为数组的情况,而我们通常使用ArrayList来表示动态数组.获取到ArrayList对 ...
- java过滤器(过滤器排序)
java过滤器(过滤器排序) 定义过滤器顺序是很简单的:匹配请求的过滤器将按照它们出现在部署描述符或者编程式配置中的顺序添加到过滤器链中(记住,如果同时再部署描述符或者编程式配置中设置了一些过滤器,那 ...
- java实现各种排序算法
java实现各种排序算法 import java.util.Arrays; public class SomeSort { public static void main(String[] args) ...
- ElasticSearch6.0 Java API 使用 排序,分组 ,创建索引,添加索引数据,打分等(一)
ElasticSearch6.0 Java API 使用 排序,分组 ,创建索引,添加索引数据,打分等 如果此文章对你有帮助,请关注一下哦 1.1 搭建maven 工程 创建web工程 ...
- Java实现选择排序
选择排序思想就是选出最小或最大的数与第一个数交换,然后在剩下的数列中重复完成该动作. package Sort; import java.util.Arrays; public class Selec ...
随机推荐
- git
CMD命令:git initgit add . [添加文件至暂存区]git commit -m '描述性语句 随意写即可'git branch gh-pages [创建仓库分支]git checkou ...
- 超详细mysql left join,right join,inner join用法分析
下面是例子分析表A记录如下: aID aNum 1 a20050111 2 a20050112 3 a20050113 4 ...
- SCNU ACM 2016新生赛决赛 解题报告
新生初赛题目.解题思路.参考代码一览 A. 拒绝虐狗 Problem Description CZJ 去排队打饭的时候看到前面有几对情侣秀恩爱,作为单身狗的 CZJ 表示很难受. 现在给出一个字符串代 ...
- JAVA通信系列二:mina入门总结
一.学习资料 Mina入门实例(一) http://www.cnblogs.com/juepei/p/3939119.html Mina入门教程(二)----Spring4 集成Mina http:/ ...
- .NET 基础一步步一幕幕[out、ref、params]
out.ref.params out: 如果你在一个方法中,返回多个相同类型的值的时候,可以考虑返回一个数组. 但是,如果返回多个不同类型的值的时候,返回数组就不行了,那么这个时候, 我们可以考虑使用 ...
- MySQL基础之存储过程
学过之后却没有总结,今天好不容易有点时间来看看. 存储过程的优势 1.简化复杂的SQL语句,将多个SQL语句封装成为一个存储过程,可以在其中加上一些流程控制语句 2.存储过程封装在数据库内部,编译之后 ...
- eclipse 突然 一直在loading descriptor for XXX (XXX为工程名)Cancel Requested
问题: eclipse 启动后,啥也不干,就一直在loading descriptor for XXX (XXX为工程名),,其他什么操作都不能操作. 如下图所示,保存文件也无法保存. 这个怎么办? ...
- 复习sql server
1.数据库的概念模型独立于具体的机器和dbms 概念模型侧重于表达建模对象之间联系的语义,它是一种独立于计算机系统的模型,是现实世界的第一层次抽象,是用户和数据库设计人员进行交流的工具 2.数据库的数 ...
- SQL Server 阻止了对组件“xp_cmdshell”的 过程“sys.xp_cmdshell”的访问,因为此组件已作为此服务器安全配置的一部分而被关闭。
今天在创建数据库的时候突然发现,xp_cmdshell的存储过程不能用了,网上一搜,发现大部分都是只关闭安全配置,然后就有了下文 代码:具体的看注释,值得一提的是==>reconfigure w ...
- 【原】SDWebImage源码阅读(一)
[原]SDWebImage源码阅读(一) 本文转载请注明出处 —— polobymulberry-博客园 1. 前言 一直没有系统地读过整套源码,就感觉像一直看零碎的知识点,没有系统读过一本专业经典书 ...