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"}]} ...
随机推荐
- Logcat用法初探
首先定位到adb所在的目录 将手机连接上电脑. 在命令行运行: adb devices 这个命令可以列出所有连上的移动设备. 在命令行运行: adb logcat 可以显示日志. 以下是例子截图: ...
- Rust 的安装和使用举例
一.环境 二.安装 $curl -sSf https://static.rust-lang.org/rustup.sh | sh Welcome to Rust. This script will d ...
- 如何在onCreate方法中获取视图的宽度和高度
你可以通过视图的getWidth()和getHeight()来获取视图的宽度和高度. 但是,可能会让你失望的是,如果你直接在onCreate方法内调用这两个函数,你会的到0. 为什么呢? 这是因为,当 ...
- 牛客网-《剑指offer》-重建二叉树
题目:http://www.nowcoder.com/practice/8a19cbe657394eeaac2f6ea9b0f6fcf6 C++ /** * Definition for binary ...
- Ant详解之-path、classpath和fileset
转自:http://www.cnblogs.com/itech/archive/2011/11/01/2231206.html 一 .<path/> 和 <classpath/> ...
- Go语言中Socket通信之Tcp客户端
1.用法: (1)定义远程IP地址.使用net.ResolveTCPAddr()方法,定义一个TCP地址,做为目标连接地址. (2)调用net.DialTCP("tcp",nil, ...
- DbScopeFactory
using (var db = DbScopeFactory.Create()) { //这里修改数据 db.SaveChanges(); }
- Spring+MyBatis纯注解零XML整合(4)
不得不说,利用XML作为配置文件是一个非常好的想法,它可以轻松地实现配置集中化,而且修改之后无需再次编译.然而,由于大多数情况下开发者基本都会拿到程序的源码,加之对于各种XML配置文件一般情况下也只有 ...
- 升级Linux内核导致vmware无法使用(vmnet模块无法编译)解决方式
近期将ubuntu升级到了14.04,出现了vmware无法启动的情况. 详细表现为:每次启动的时候都会弹出一个VMWare Kernel Module Updater的对话框,要求依据当前内核版本号 ...
- js 判断是否是空对象
主要思路 我们要考虑到的主要有:js原生对象,宿主对象(浏览器上面的). 首先对于宿主对象 主要判断是DOM 对象 和是否是window 对象 是否是DOM对象 value.nodeType 是否存 ...