文档章节

Java类排序_浅析

Ieenben
 Ieenben
发布于 2015/02/23 14:04
字数 418
阅读 30
收藏 0

0、基本集合排序的方法:

java.util.Arrays.sort(o);//Arrays是类;
java.util.Collections.sort(o);//Collections是类;

    

对Java类排序,介绍两种常用方法:

1、对所要排序的类,实现了该接口:

java.lang.Comparable<T>

    即实现了方法: 比较结果大的返回1,相等返回0,小于返回-1。

public int compareTo(T o);//定义类比较的方法;

对符合以上要求,则可以直接使用:

java.util.Arrays.sort(o);//升序排序,对集合数组有效,不可以对List使用
java.util.Collections.sort(List arg0);

Eg:

public class Ar implements Comparable<Ar>{
    //定义所要创建的集合类,实现对应接口;
	int a;
	int b;
	String name;
	Ar(){}
	Ar(int a,int b,String name){
		this.a=a;
		this.b=b;
		this.name=name;
	}
	public int compareTo(Ar o) {
		return this.name.compareTo(o.name);
	}
}
public class Join{
	public static void main(String[] args) {
		/*Ar[] ars =new Ar[2];
		ars[0]=new Ar(1,3);
		ars[1]=new Ar(3,1);
		Arrays.sort(ars);
		for(Ar i : ars)
		{
			System.out.println("a="+i.a+",b="+i.b);
		}*/
		List br_list=new ArrayList();
		br_list.add(new Ar(2,5,"z"));
		br_list.add(new Ar(2,2,"b"));
		Collections.sort(br_list);
		for(int  i=0 ;i<br_list.size();i++)
		{
			System.out.println("a="+((Ar)br_list.get(i)).a+",b="+((Ar)br_list.get(i)).b+
					",name="+((Ar)br_list.get(i)).name);
		}
	}
}


2、使用比较器:Comparator<T>(接口){public int compare(T o1,To2){}}

    在调用Arrays.sort(T o,Comparator<T> c),Collections.sort(T o,Comparator<T> c)

传递一个比较器;

Collections.sort(list, new Comparator<Br>(){
	@Override
	public int compare(Br o1, Br o2) {	
	return o1.c>o2.c?1:-1;
	//return o1.d>o2.d?1:-1;
	}
});

public class Br {
	int c;
	int d;
	public Br(){}
	public Br(int c,int d){
		this.c=c;
		this.d=d;
		
	}
}


扩展:

    源码java.util.Collections类文件sort(List<T> list, Comparator<? super T> c)的代码

public static <T> void sort(List<T> list, Comparator<? super T> c) {
        Object[] a = list.toArray();
        Arrays.sort(a, (Comparator)c);
        ListIterator i = list.listIterator();
        for (int j=0; j<a.length; j++) {
            i.next();
            i.set(a[j]);
        }
    }

   实际上Collections.sort(List<T> list, Comparator<? super T> c)的实现也是将list转化成数组用Arrays.sort处理。

© 著作权归作者所有

共有 人打赏支持
Ieenben
粉丝 4
博文 35
码字总数 5025
作品 0
广州
我对java String的理解 及 源码浅析

摘要: 摘要: 原创出处: http://www.cnblogs.com/Alandre/ 泥沙砖瓦浆木匠 希望转载,保留摘要,谢谢! 每天起床告诉自己,自己的目标是 ”技术 + 英语 还有生活“! -泥沙砖瓦浆木匠 一.char...

泥沙砖瓦浆木匠
2014/08/17
0
0
sharding-jdbc分库分表规则(1)-单表查询

前言 当数据量到达一定数量级的时候,一般都会考虑分库分表。sharding-jdbc是一个开源的客户端分库分表基础类库,以一个jar包的形式提供,基于原生的JDBC驱动进行增强,基本能够无缝整合旧代...

xiaomin0322
06/07
0
0
java.io.Serializable浅析

 Java API中java.io.Serializable接口源码: 1 public interface Serializable {2 }   类通过实现java.io.Serializable接口可以启用其序列化功能。未实现次接口的类无法使其任何状态序列化...

偶尔诗文
2015/08/16
0
0
Java PriorityQueue && PriorityBlockingQueue

Java PriorityQueue && PriorityBlockingQueue 我们知道队列是遵循先进先出(First-In-First-Out)模式的,但有些时候需要在队列中基于优先级处理对象。举个例子,比方说我们有一个每日交易时...

秋风醉了
2015/01/12
0
0
阿里历年经典Java面试题汇总

Volatile的特征: A、禁止指令重排(有例外) B、可见性 Volatile的内存语义: 当写一个volatile变量时,JMM会把线程对应的本地内存中的共享变量值刷新到主内存。 当读一个volatile变量时,J...

Java团长17
07/11
0
0

没有更多内容

加载失败,请刷新页面

加载更多

申请Let's Encrypt永久免费SSL证书

环境安装 1、安装git yum install git-core 2、安装python 系统自带 不用安装 只要版本大于2.7即可。 获取Let's Encrypt免费SSL证书 先停止nginx 在阿里云安全组里加入 443端口的入规则 git ...

HGMrWang
27分钟前
0
0
如何使用playframework进行更好的开发

1: 自定义基类Controller 相信刚开始使用Play的人写的Controller 都继承于 play.mvc.Controller , 但这并不是一个很好的选择,自建基类Controller可以扩展更多的功能。 1.1 验证功能。 后台...

tuerqidi
31分钟前
3
0
解决ubuntu下root用户 不能ftp登陆的问题

解决ubuntu下root用户 不能ftp登陆的问题 一般情况下,由于种种原因ftp是不让root用户远程登陆,但只要你修改以个文件就可以登陆了. 注释掉 /etc/ftpusers 中的root即可 (最后重启vsftpd serv...

15834278076
43分钟前
0
0
《JavaScript高级程序设计(第3版)》阅读笔记

第6章 面向对象的程序设计 6.2 创建对象 6.2.1 工厂模式 JavaScript创建对象(一)—— 工厂模式 6.2.2 构造函数模式 JavaScript创建对象(二)——构造函数模式 6.2.3 原型模式 JavaScript...

Bob2100
48分钟前
0
0
Windows小技巧 – Win+R提高Windows使用效率

追求效率的朋友都需要一款顺手的快速启动工具,Win 平台上有键盘流的RunZ、Listary、ALTRun、Launchy、Wox 和图标流的 Fences、Rolan、 WinLaunch 等,而 Mac 上也有 Alfred、Spotlight。 而...

QQZZFT
50分钟前
3
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部