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"}]} ...
随机推荐
- Auty 2017——WebMonitor接口本地检测平台
转载:http://www.cnblogs.com/LanTianYou/p/6272484.html#_label0_0 目录 2016Auty诞生 2017一个新的开始 WebMonitor接口本 ...
- 【算法】插入排序(Insertion Sort)
(PS:内容参考MIT算法导论) 插入排序(Insertion Sort): 适用于数目较少的元素排序 伪代码(Pseudocode): 例子(Example): 符号(notation): 时间复杂 ...
- 15款不容错过的前端开发Javascript和css类库 - 2017版本~
前端的JS和CSS类库日新月异, 在今天这篇介绍中,我们将精挑细选15款超棒的JS/CSS类库, 希望大家在开发过程中会觉得有帮助~ Core UI 基于Bootstrap4的一套UI类库, Core ...
- Unity3d 屏幕截图。并保存。iOS
- ( void ) imageSaved: ( UIImage *) image didFinishSavingWithError:( NSError *)error contextInfo: ( ...
- Jquery——几个注意的小知识
event.stopPropagation() 停止事件冒泡 event.preventDefault()//组织默认行为(例如错误的时候,阻止按钮提交) event.type获取事件类型 event ...
- uni - 自定义组件
目录结构如下 点击下载自定义组件示例
- Python-统计svn代码总行数
1 #!/bin/bash/python 2 # -*-coding:utf-8-*- 3 #svn统计url代码行数脚本,过滤空行,不过滤注释. 4 5 import subprocess,os,s ...
- sell 创建项目
1.数据操作软件 2.创建项目 3.mevan 镜像
- OpenCV实现任意大小图片的合并(转)
OpenCV实现图像合并主要有两种方法 方法一:使用Mat.push_back方法将列数相同的图像加到最后一行 方法二: 主要思路是将图像拷贝到待合并图像的感兴趣区域 (1)新建一个要合并的图像(容器 ...
- java 八种基本数据类型之与对应的封装类之间的相互转化
迁移时间--2017年5月26日17:47:37 Author:Marydon 一.java数据类型之基本数据类型 UpdateTime--2017年1月9日17:31:14 (三)格式转换 1. ...