使用JAVA进行排序
2024-10-18 18:18:44
利用JAVA完成排序
当我们在进行数据库进行查询的时候,当需要按某个字段来进行排序的时候,可以使用SQL语句来完成排序,可以升序,也可以降序。JAVA中的Collections类也可以完成这种操作,SQL的用法和这种集合工具类的操作,可以用于不同的情况中,至于怎么用,可以根据业务场景来选择,下面我罗列出具体的代码,大家可以参考。
1)创建工程名为sort的JAVA工程
创建包结构:
创建User类:
package com.sunyard.bean; /**
* <p>
* 用户类,实现Comparable接口,并且在实体类中实现需要排序的逻辑代码
* </p>
* @author:774346810@qq.com
* @date:2017-6-25
*/
public class User implements Comparable<User>{
private String id;//编号
private String name;//姓名
private double salary;//工资
private int age;//年龄
private String city;//城市 public User(){} public User(String id, String name, double salary, int age, String city) {
this.id = id;
this.name = name;
this.salary = salary;
this.age = age;
this.city = city;
} public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public double getSalary() {
return salary;
}
public void setSalary(double salary) {
this.salary = salary;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getCity() {
return city;
}
public void setCity(String city) {
this.city = city;
} @Override
public String toString() {
return "User [id=" + id + ", name=" + name + ", salary=" + salary
+ ", age=" + age + ", city=" + city + "]";
}
@Override
public int compareTo(User o) {
int result = ((this.getAge() - o.getAge()) * 10);//按照年龄的降序排序
//int result = ((o.getAge() - this.getAge()) * 10);//按照年龄的升序排序
//int result = o.getName().compareTo(this.getName());//按照英文字典顺序的降序
//int result = this.getName().compareTo(o.getName());//按照英文字典顺序的升序
return result;
} }
创建测试类测试:
package com.sunyard.test; import java.util.ArrayList;
import java.util.Collections;
import java.util.List; import com.sunyard.bean.User; public class Test {
public static void main(String[] args) {
List<User> users = new ArrayList<User>();
User user1 = new User("1", "zhangsan", 10000, 29, "hangzhou");
User user2 = new User("2", "lisi", 12000, 25, "hangzhou");
User user3 = new User("3", "wangwu", 11000, 27, "hangzhou");
User user4 = new User("4", "zhaoliu", 11500, 26, "hangzhou"); users.add(user1);
users.add(user2);
users.add(user3);
users.add(user4); System.out.println("排序前 -------------------- >>>");
for(int i = 0;i < users.size();i++){
System.out.println(users.get(i));
} Collections.sort(users); System.out.println("排序后 -------------------- >>>");
for(int i = 0;i < users.size();i++){
System.out.println(users.get(i));
}
}
}
控制台输出:
排序前 -------------------- >>>
User [id=1, name=zhangsan, salary=10000.0, age=29, city=hangzhou]
User [id=2, name=lisi, salary=12000.0, age=25, city=hangzhou]
User [id=3, name=wangwu, salary=11000.0, age=27, city=hangzhou]
User [id=4, name=zhaoliu, salary=11500.0, age=26, city=hangzhou]
排序后 -------------------- >>>
User [id=2, name=lisi, salary=12000.0, age=25, city=hangzhou]
User [id=4, name=zhaoliu, salary=11500.0, age=26, city=hangzhou]
User [id=3, name=wangwu, salary=11000.0, age=27, city=hangzhou]
User [id=1, name=zhangsan, salary=10000.0, age=29, city=hangzhou]
第二种方式,实现自定义的比较器:
自定义比较器代码:
package com.sunyard.util; import java.util.Comparator; import com.sunyard.bean.User; /**
* <p>实现自定义比较器</p>
* @author:774346810@qq.com
* @date:2017-6-25
*/
public class UserComparator implements Comparator<User>{ @Override
public int compare(User o1, User o2) {
int result = 0;
result = ((o1.getAge() - o2.getAge()) * 10);//升序
result = ((o2.getAge() - o1.getAge()) * 10);//降序
return result;
} }
测试类:
package com.sunyard.test; import java.util.ArrayList;
import java.util.Collections;
import java.util.List; import com.sunyard.bean.User;
import com.sunyard.util.UserComparator; public class Demo {
public static void main(String[] args) {
List<User> users = new ArrayList<User>();
User user1 = new User("1", "zhangsan", 10000, 29, "hangzhou");
User user2 = new User("2", "lisi", 12000, 25, "hangzhou");
User user3 = new User("3", "wangwu", 11000, 27, "hangzhou");
User user4 = new User("4", "zhaoliu", 11500, 26, "hangzhou"); users.add(user1);
users.add(user2);
users.add(user3);
users.add(user4); System.out.println("排序前 -------------------- >>>");
for(int i = 0;i < users.size();i++){
System.out.println(users.get(i));
} UserComparator comparator = new UserComparator();
Collections.sort(users, comparator); System.out.println("排序后 -------------------- >>>");
for(int i = 0;i < users.size();i++){
System.out.println(users.get(i));
}
}
}
控制台输出:
排序前 -------------------- >>>
User [id=1, name=zhangsan, salary=10000.0, age=29, city=hangzhou]
User [id=2, name=lisi, salary=12000.0, age=25, city=hangzhou]
User [id=3, name=wangwu, salary=11000.0, age=27, city=hangzhou]
User [id=4, name=zhaoliu, salary=11500.0, age=26, city=hangzhou]
排序后 -------------------- >>>
User [id=1, name=zhangsan, salary=10000.0, age=29, city=hangzhou]
User [id=3, name=wangwu, salary=11000.0, age=27, city=hangzhou]
User [id=4, name=zhaoliu, salary=11500.0, age=26, city=hangzhou]
User [id=2, name=lisi, salary=12000.0, age=25, city=hangzhou]
最新文章
- App开发:模拟服务器数据接口 - MockApi
- charles抓包工具
- 每瓶啤酒2元,2个空酒瓶或4个瓶盖可换1瓶啤酒。10元最多可喝多少瓶啤酒? php
- Asp.net Mvc模块化开发之“部分版本部分模块更新(上线)”
- node.js简单的页面输出
- UML: 状态机图
- 计算广义积分$$\int_0^{+\infty}\cos x^p {\rm d}x,\int_0^{+\infty}\sin x^p {\rm d}x, p>;1$$
- 如何看懂Code128条形码
- (转) 如何命令查找linux系统版本!
- C语言库函数大全及应用实例九
- asp.net 动态压缩、切割图片,并做缓存处理机制
- STL中map的用法
- [js高手之路]Node.js+jade+mongodb+mongoose实现爬虫分离入库与生成静态文件
- Linux下使用gcc编程初体验
- Atitit 纯java项目的提升进度大法---通用json dsl接口
- neutron full stack
- ip route 命令详解
- sql语句 case
- VS 窗体大小
- 15、IO (转换流、缓冲流)
热门文章
- Web开发者的福利 30段超实用CSS代码
- Python——爬虫学习2
- PL/SQL之存储过程和函数
- Hadoop源码学习笔记(4) ——Socket到RPC调用
- apache2.4和2.2 的一些区别
- apache-kylin 权威指南—读书笔记
- 【转】golang的channel的几种用法
- Python Django ORM基本增删改查
- 关于beginPath()和closePath()的关系>;>;canvas的beginPath和closePath分析总结,包括多段弧的情况
- N个必备的实用jQuery代码段