List元素排序简例
前言:这种处理方式,在程序中偶尔会用的到,栗子很简单,关键是加强一下记忆,以及以备后用
1:实现Comparable接口的方式
1-1:没有使用泛型,重写compareTo()方法时需要判断类型及转换
public class Region implements Comparable{
/**
* 区域ID
*/
private Integer id;
/**
* 区域名称
*/
private String name;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
/**
* 方便打印对象信息,重写toString()方法
* @return
*/
@Override
public String toString() {
final StringBuffer sb = new StringBuffer("{\"Region\":{");
sb.append("\"id\":\"").append(id).append("\"").append(",");
sb.append("\"name\":\"").append(name).append("\"");
sb.append("}}");
return sb.toString();
}
/**
* 重写排序的方法,本例的核心方法
* @param o
* @return
*/
@Override
public int compareTo(Object o) {
if (o instanceof Region) {
Region r = (Region) o;
if (this.getId() > r.getId()) {
return 1;
} else {
return -1;
}
} else {
throw new ClassCastException("Can't compare");
}
}
}
import java.util.ArrayList;
import java.util.Collections;
import java.util.List; public class TestOrderMain {
public static void main(String args[]){
List<Region> list = new ArrayList<Region>();
//构造一个无序的集合
Region region1 = new Region();
region1.setId(1);
region1.setName("华东");
list.add(region1);
Region region2 = new Region();
region2.setId(3);
region2.setName("华北");
list.add(region2);
Region region3 = new Region();
region3.setId(2);
region3.setName("华南");
list.add(region3);
//排序
Collections.sort(list);
//出入排序后的集合
for(Region region : list){
System.out.println(region.toString());
}
}
}
1-2:使用了泛型,重写compareTo()方法时无需判断类型及转换,相对简单一些
public class Region implements Comparable<Region>{
/**
* 区域ID
*/
private Integer id;
/**
* 区域名称
*/
private String name;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
/**
* 方便打印对象信息,重写toString()方法
* @return
*/
@Override
public String toString() {
final StringBuffer sb = new StringBuffer("{\"Region\":{");
sb.append("\"id\":\"").append(id).append("\"").append(",");
sb.append("\"name\":\"").append(name).append("\"");
sb.append("}}");
return sb.toString();
}
/**
*重写排序的方法,本例的核心方法
* @param o
* @return
*/
@Override
public int compareTo(Region o) {
return this.getId().compareTo(o.getId());
}
}
import java.util.ArrayList;
import java.util.Collections;
import java.util.List; public class TestOrderMain {
public static void main(String args[]){
List<Region> list = new ArrayList<Region>();
//构造一个无序的集合
Region region1 = new Region();
region1.setId(1);
region1.setName("华东");
list.add(region1);
Region region2 = new Region();
region2.setId(3);
region2.setName("华北");
list.add(region2);
Region region3 = new Region();
region3.setId(2);
region3.setName("华南");
list.add(region3);
//排序
Collections.sort(list);
//出入排序后的集合
for(Region region : list){
System.out.println(region.toString());
}
}
}
2:实现Comparator接口
2-1:这种方式比较好,在排序的时候直接使用Comparator的匿名对象,排序的方式也一目了然,并且和集合中的元素彻底解耦
public class Region{
/**
* 区域ID
*/
private Integer id;
/**
* 区域名称
*/
private String name;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
/**
* 方便打印对象信息,重写toString()方法
* @return
*/
@Override
public String toString() {
final StringBuffer sb = new StringBuffer("{\"Region\":{");
sb.append("\"id\":\"").append(id).append("\"").append(",");
sb.append("\"name\":\"").append(name).append("\"");
sb.append("}}");
return sb.toString();
}
}
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List; public class TestOrderMain {
public static void main(String args[]){
List<Region> list = new ArrayList<Region>();
//构造一个无序的集合
Region region1 = new Region();
region1.setId(1);
region1.setName("华东");
list.add(region1);
Region region2 = new Region();
region2.setId(3);
region2.setName("华北");
list.add(region2);
Region region3 = new Region();
region3.setId(2);
region3.setName("华南");
list.add(region3);
//排序
Collections.sort(list,new Comparator<Region>(){
public int compare(Region o1, Region o2) {
return o1.getId().compareTo(o2.getId());
}
});
//出入排序后的集合
for(Region region : list){
System.out.println(region.toString());
}
}
}
2-2:实现Comparator接口,排序的时候直接传入对应的排序元素的匿名对象,估计也能使用泛型的形式,这个自己可以实验一下
import java.util.Comparator;
public class Region implements Comparator{
/**
* 区域ID
*/
private Integer id;
/**
* 区域名称
*/
private String name;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
/**
* 方便打印对象信息,重写toString()方法
* @return
*/
@Override
public String toString() {
final StringBuffer sb = new StringBuffer("{\"Region\":{");
sb.append("\"id\":\"").append(id).append("\"").append(",");
sb.append("\"name\":\"").append(name).append("\"");
sb.append("}}");
return sb.toString();
}
/**
* 重写排序的方法,本例的核心方法
* @param o1
* @param o2
* @return
*/
@Override
public int compare(Object o1, Object o2) {
if (o1 instanceof Region && o2 instanceof Region) {
Region r1 = (Region) o1;
Region r2 = (Region) o2;
if (r1.getId() > r2.getId()) {
return 1;
} else {
return -1;
}
} else {
throw new ClassCastException("Can't compare");
}
}
}
import java.util.ArrayList;
import java.util.Collections;
import java.util.List; public class TestOrderMain {
public static void main(String args[]){
List<Region> list = new ArrayList<Region>();
//构造一个无序的集合
Region region1 = new Region();
region1.setId(1);
region1.setName("华东");
list.add(region1);
Region region2 = new Region();
region2.setId(3);
region2.setName("华北");
list.add(region2);
Region region3 = new Region();
region3.setId(2);
region3.setName("华南");
list.add(region3);
//排序
Collections.sort(list,new Region());
//出入排序后的集合
for(Region region : list){
System.out.println(region.toString());
}
}
}
List元素排序简例的更多相关文章
- linux下C语言socket网络编程简例
原创文章,转载请注明转载字样和出处,谢谢! 这里给出在linux下的简单socket网络编程的实例,使用tcp协议进行通信,服务端进行监听,在收到client的连接后,发送数据给client:clie ...
- H5 60-浮动元素排序规则
60-浮动元素排序规则 <!DOCTYPE html><html lang="en"><head> <meta charset=" ...
- Python对List中的元素排序
首先定义一个compare函数: def compare(sf1, sf2): if (sf1.value > sf2.value): return -1; elif (sf1.value == ...
- SortedSet的实现类是TreeSet:它的作用是字为添加到TreeSet中的元素排序。
SortedSet可自动为元素排序. SortedSet的实现类是TreeSet:它的作用是字为添加到TreeSet中的元素排序. 练习:自定义类用TreeSet排序. 与HashSet不同, ...
- 《Algorithms算法》笔记:元素排序(4)——凸包问题
<Algorithms算法>笔记:元素排序(4)——凸包问题 Algorithms算法笔记元素排序4凸包问题 凸包问题 凸包问题的应用 凸包的几何性质 Graham 扫描算法 代码 凸包问 ...
- 《Algorithms算法》笔记:元素排序(3)——洗牌算法
<Algorithms算法>笔记:元素排序(3)——洗牌算法 Algorithms算法笔记元素排序3洗牌算法 洗牌算法 排序洗牌 Knuth洗牌 Knuth洗牌代码 洗牌算法 洗牌的思想很 ...
- 《Algorithm算法》笔记:元素排序(2)——希尔排序
<Algorithm算法>笔记:元素排序(2)——希尔排序 Algorithm算法笔记元素排序2希尔排序 希尔排序思想 为什么是插入排序 h的确定方法 希尔排序的特点 代码 有关排序的介绍 ...
- 《Algorithms算法》笔记:元素排序(1)——简单排序
<Algorithms算法>元素排序(1)——简单排序 Algorithms算法元素排序1简单排序 排序问题 1 回调函数 2Java中回调函数的路线图 3 全序 4 Comparable ...
- Python对列表中字典元素排序
问题起源 json对象a,b a = '{"ROAD": [{"id": 123}, {"name": "no1"}]} ...
随机推荐
- mysql CAPI 接口 读取中文乱码的解决方案(转)
最近的yymysqlsdk的开源项目里,对中文的支持不到位,因此用了1.5天的时间,对中文处理的各个情况进行了分析. 1.首先确认你的MySQL配置文件,my.ini (只针对window ...
- (纪录片)你必须知道的科学 The Science That You Have To Know (2014)
简介: 类型: 纪录片制片国家/地区: 英国语言: 英语上映日期: 2014-2片长: 150分钟 主要内容: 你有没有认真想过,自己的身体有多奇妙?人体是世间最复杂的一项工程杰作,他也带来了一些非常 ...
- cookie相关的函数
浏览器中,使用JavaScript操作cookie的两个工具函数. 设置cookie值, 必须的參数是name和value,可选參数是过期天数和域名. // 设置cookie值(key,value,过 ...
- 【POJ 3071】 Football(DP)
[POJ 3071] Football(DP) Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 4350 Accepted ...
- WampServer在win10系统下安装的坑
WampServer之前一直是好好的,最近换了Win10的系统,安装的不太顺利. 1.问题一 出现的第一个问题,就是安装时会报错.怎么解决的,具体的我已经忘记了,好像是要下载vc运行时包. 2.问题二 ...
- HTML页面跳转的5种方式
下面列了五个例子来详细说明,这几个例子的主要功能是:在5秒后,自动跳转到同目录下的hello.html(根据自己需要自行修改)文件. 1) html的实现 <head> <!-- 以 ...
- SQL Server 之 附加数据库出现“ 拒绝访问 ”
错误信息如下图所示,附加数据库时出现“拒绝访问”: 解决方案: 修改拒绝访问的文件的安全权限,这里是修改数据库的.mdf文件的安全权限.
- 微信小程序 - 超出文字省略组件
使用说明 sty:定义样式 text:文字 clamp: 0:代表不限制 1:超过1行省略号(默认) n:超过n行省略 点击下载:ellipsis
- mySQL内存及虚拟内存优化设置[转]
mySQL内存及虚拟内存优化设置 . 数据库mySQL内存优化G-LB 为了装mysql环境测试,装上后发现启动后mysql占用了很大的虚拟内存,达8百多兆.网上搜索了一下,得到高人指点my.ini ...
- String的一些方法试探
package countio; import java.io.BufferedReader; import java.io.File; import java.io.FileReader; impo ...