前言:这种处理方式,在程序中偶尔会用的到,栗子很简单,关键是加强一下记忆,以及以备后用

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元素排序简例的更多相关文章

  1. linux下C语言socket网络编程简例

    原创文章,转载请注明转载字样和出处,谢谢! 这里给出在linux下的简单socket网络编程的实例,使用tcp协议进行通信,服务端进行监听,在收到client的连接后,发送数据给client:clie ...

  2. H5 60-浮动元素排序规则

    60-浮动元素排序规则 <!DOCTYPE html><html lang="en"><head> <meta charset=" ...

  3. Python对List中的元素排序

    首先定义一个compare函数: def compare(sf1, sf2): if (sf1.value > sf2.value): return -1; elif (sf1.value == ...

  4. SortedSet的实现类是TreeSet:它的作用是字为添加到TreeSet中的元素排序。

      SortedSet可自动为元素排序. SortedSet的实现类是TreeSet:它的作用是字为添加到TreeSet中的元素排序.   练习:自定义类用TreeSet排序. 与HashSet不同, ...

  5. 《Algorithms算法》笔记:元素排序(4)——凸包问题

    <Algorithms算法>笔记:元素排序(4)——凸包问题 Algorithms算法笔记元素排序4凸包问题 凸包问题 凸包问题的应用 凸包的几何性质 Graham 扫描算法 代码 凸包问 ...

  6. 《Algorithms算法》笔记:元素排序(3)——洗牌算法

    <Algorithms算法>笔记:元素排序(3)——洗牌算法 Algorithms算法笔记元素排序3洗牌算法 洗牌算法 排序洗牌 Knuth洗牌 Knuth洗牌代码 洗牌算法 洗牌的思想很 ...

  7. 《Algorithm算法》笔记:元素排序(2)——希尔排序

    <Algorithm算法>笔记:元素排序(2)——希尔排序 Algorithm算法笔记元素排序2希尔排序 希尔排序思想 为什么是插入排序 h的确定方法 希尔排序的特点 代码 有关排序的介绍 ...

  8. 《Algorithms算法》笔记:元素排序(1)——简单排序

    <Algorithms算法>元素排序(1)——简单排序 Algorithms算法元素排序1简单排序 排序问题 1 回调函数 2Java中回调函数的路线图 3 全序 4 Comparable ...

  9. Python对列表中字典元素排序

    问题起源 json对象a,b a = '{"ROAD": [{"id": 123}, {"name": "no1"}]} ...

随机推荐

  1. Docker创建虚机和swarm

    创建虚机: First, quickly create a virtual switch for your virtual machines (VMs) to share, so they will ...

  2. SpringBoot添加对Mybatis的支持

    1.修改maven配置文件pom.xml,添加对mybatis的支持: <dependency> <groupId>org.mybatis.spring.boot</gr ...

  3. 视图控制器生命周期中各个重要的方法(Swift) (Important Methods during the Lifecycle of a View Controller)

    1. init(coder:) 它是视图控制器从故事板创建实例的默认初始化函数.(It is the initializer for UIViewController instances create ...

  4. 带你走进EJB--将EJB发布为Webservice(4)

    接下来的我们将会自定义一个对象,然后看看EJB是如何对复杂的参数发布成WebService的. 代码如下:在第一个版本的基础之上加上增加用户的方法,参数为User. package com.tgb.e ...

  5. 忘记webogic管理控制台密码

    cd /user_projects/domains/base_domain/security cp DefaultAuthenticatorInit.ldift DefaultAuthenticato ...

  6. Java Spring Quartz 定时任务

    公司需要使用JAVA的WebServer完成简单的定时跑任务的工作.其他例如:每隔30分钟执行锁定用户解锁任务. Quartz 在开源任务调度框架中的翘首,它提供了强大任务调度机制,难能可贵的是它同时 ...

  7. itextpdf 备忘

    加删除线: .setUnderline(Color.BLACK, 2.0f, 0.0f, 6.0f, 0.0f, 1) https://developers.itextpdf.com/examples ...

  8. Java多线程之ReentrantLock重入锁简介与使用教程

    转载请注明原文地址:http://www.cnblogs.com/ygj0930/p/6543947.html  我们知道,线程安全问题需要通过线程之间的同步来解决,而同步大多使用syncrhoize ...

  9. 修改Ubuntu默认运行级别,启动字符界面

    Ubuntu的默认开机的runlevel是2,可以用runlevel来查看当前的默认运行级别. debian系(ubuntu是基于debian)的Linux一直是用runlevel 2来默认启动,并且 ...

  10. Flash:利用Bitmapdata,ColorTransform,DrawPath,制造绚丽效果

    JamesLi的文章:http://www.adobe.com/cn/devnet/actionscript/articles/silkflash-as.html 总结一下绚丽效果的核心: 1.利用一 ...