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"}]} ...
随机推荐
- (转)真正的中国天气api接口xml,json(求加精) ...
我只想说现在网上那几个api完全坑爹有木有??? 官方的申请不来有木有,还有收费有木有?? 咱这种菜鸟只能用免费的了!!!! http://m.weather.com.cn/data/101110 ...
- oauth2-server-php-docs 授权类型
授权码 概观 在Authorization Code交付式时使用的客户端想要请求访问受保护资源代表其他用户(即第三方).这是最常与OAuth关联的授予类型. 详细了解授权码 用例 代表第三方来电 履行 ...
- [Algorithm] Count occurrences of a number in a sorted array with duplicates using Binary Search
Let's say we are going to find out number of occurrences of a number in a sorted array using binary ...
- log4j.xml写入数据库,只有SQL和参数,无其他信息
<?xml version="1.0" encoding="UTF-8" ?><!DOCTYPE log4j:configuration SY ...
- 当Ruby的model名字出错时,在现实view时显示错误的提示
app/controllers/courses_controller.rb:1:in `<top (required)>' app/controllers/courses_controll ...
- 磁盘I/O的性能评估方法
磁盘I/O的性能评估方法 http://blog.synology.com/blog/?p=2086 通常,我们很容易观察到数据库服务器的内存和CPU压力.但是对I/O压力没有直观的判断方法.磁盘有两 ...
- C++ 第十二课 其它标准C函数
abort() 停止程序执行 assert() 当表达式非真,停止程序执行 atexit() 当程序退出执行设定的程序 bsearch() 执行折半查找 exit() 停止程序执行 getenv() ...
- python 爬虫资料
API Requests PyQuery http://www.tuicool.com/articles/UZrmUb2 http://blog.csdn.net/cnmilan/article/de ...
- 用Jersey构建RESTful服务7--Jersey+SQLServer+Hibernate4.3+Spring3.2
一.整体说明 本例执行演示了用 Jersey 构建 RESTful 服务中.怎样集成 Spring3 二.环境 1.上文的项目RestDemo 2.Spring及其它相关的jar ,导入项目 三.配置 ...
- 取代Ant——Maven简介
转载请注明原文地址:http://www.cnblogs.com/ygj0930/p/6625724.html 一:目前开发存在的问题 在没有Maven之前,我们开发一个项目,需要自行导入各种不同的 ...