java自定义容器排序的两种方法

首先说一下排序的返回值的含义。对于参与比较的两个Object,o1和o2,如果函数的返回值为正值,把o1排在o2后面;返回值为负值,把o1排在o2前面。如果返回值是0,按照容器之前的顺序排列。在compareTo中,this相当于o1,传入的Object相当于o2

第一种方法:对于要排序的类实现Comparable接口

package sort;

import java.util.ArrayList;
import java.util.Collections;
import java.util.Iterator;
import java.util.List;
//采用实现Comparable接口的方法实现排序
class S1 implements Comparable{
	int x;
	int y;
	S1(int x, int y){
		this.x = x;
		this.y = y;
	}
	//实现排序方法。先比较x,如果相同比较y
	@Override
	public int compareTo(Object o) {
		S1 obj = (S1) o;
		if(x != obj.x)
		{
			return x - obj.x;
		}
		return y - obj.y;
	}
	//重写toStirng方法,改变println时的显示效果
	public String toString(){
		return "("+x+", "+y+")";
	}
}

public class Sort1 {
	public static void main(String[] args) {
		List<S1> s1Set = new ArrayList<S1>();
		S1 s1 = new S1(3,5);
		S1 s2 = new S1(2,5);
		S1 s3 = new S1(2,2);
		s1Set.add(s1);
		s1Set.add(s2);
		s1Set.add(s3);
		//对容器进行排序的函数
		Collections.sort(s1Set);
		Iterator it = s1Set.iterator();
		while(it.hasNext())
		{
			System.out.println(it.next());
		}
	}
}

第二种方法:覆盖Comparator中的compare方法。

package sort;

import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.Iterator;
import java.util.List;

class S2{
	int x;
	int y;
	S2(int x, int y){
		this.x = x;
		this.y = y;
	}
	//重写toStirng方法,改变println时的显示效果
	public String toString(){
		return "("+x+", "+y+")";
	}
}

public class Sort2 {
	public static void main(String[] args) {
		List<S2> s2Set = new ArrayList<S2>();
		S2 s1 = new S2(3,5);
		S2 s2 = new S2(4,5);
		S2 s3 = new S2(4,2);
		s2Set.add(s1);
		s2Set.add(s2);
		s2Set.add(s3);
		//对容器进行排序的函数
		Collections.sort(s2Set,c);
		Iterator it = s2Set.iterator();
		while(it.hasNext())
		{
			System.out.println(it.next());
		}
	}
	static Comparator<S2> c = new Comparator(){
		public int compare(Object a0, Object a1) {
			S2 s1 = (S2) a0;
			S2 s2 = (S2) a1;
			if(s1.x != s2.x)
			{
				return s1.x - s2.x;
			}
			else
			{
				return s1.y - s2.y;
			}
		}
	};

}
时间: 2024-08-05 20:47:29

java自定义容器排序的两种方法的相关文章

Java中集合排序的两种方法

import java.util.ArrayList; import java.util.Collections; import java.util.Comparator; import java.util.List; /** * * <p> * ClassName CollectionsSort * </p> * <p> * Description 主要介绍两种集合的排序算法<br/> * 第一:java.util.Collections.sort(jav

Java List集合排序的两种方法

1.使用 Collections 工具类中的 sort() 方法 参数不同: void sort(List list) 在自定义类User里面实现Comparable<User>接口,并重写抽象方法compareTo(Student o); void sort(List list, Comparator c) 第二个参数为了省事,可以直接使用匿名内部类 public class User implements Comparable<User>{ private int score;

ZZUOJ 1199 大小关系(拓扑排序,两种方法_判断入度和dfs回路判断)

1 /* 2 这道题如果按照度为0的节点来判断的时候,将度为0的节点和其相连的节点(度数并减去1) 3 从图中去掉,如果度为0的节点的个数为0个但是图中的节点没有都去掉的 时候那么说明 4 出现了回路!用这种方法必须将重边去除掉! 5 6 所以推荐用dfs方式进行判断!这种方式还是比较直观的! 7 */ 8 #include<iostream> 9 #include<cstring> 10 #include<cstdio> 11 #include<algorith

java连接sql server2008的两种方法

最近学到java连接数据库(sql server),发现常用的我们有两种方法,那么这里我总结一下这两种方法怎么使用,还有它们的区别,还有我们一般要使用哪一种方法. 方法一:使用jdbc-odbc桥连接sql server,作为中间媒介连接数据库; 注意我们每次在连接数据库前都必须要引入sql包:import java.sql.*;接下来的步骤都是习惯性步骤,我这里就按照每一步的使用进行列举: 1.配置数据源:打开控制面版->管理工具->数据源(ODBC)->(一般而言我们使用用户DSN)

Apache服务器自定义404页面的两种方法以及.htaccess的重要命令总结

Apache服务器自定义404错误页面有两种方法: 第一种方法最简单,直接在Apache的httpd.conf下进行配置修改命令,修改的内容请参看.htaccess命令写法中的自定义错误页面 第二种方法可以在.htaccess文件中配置命令,具体操作请参看.htaccess命令写法中的自定义错误页面 .htaccess使用方法总结 1 . 首先让的本地APACHE服务器器允许.htaccess修改 打开httpd.conf (1) Options FollowSymLinks AllowOver

数据结构:图论:拓扑排序! 两种方法!

拓扑排序:(1)由偏序变成全序的过程!直观的说,偏序指集合中仅有部分成员之间可比较!而全序指集合中全体成员之间均可比较! (2)将G中所有顶点排成一个线性序列,使得图中任意一对顶点u和v,若边(u,v)∈E(G),则u在线性序列中出现在v之前. 数据结构中进行拓扑排序的方法: 方法一: (1)在有向图中选一个没有前驱的顶点且输出之! (2)从图中删除该顶点和所有以它为尾的弧. (3)重复上述两部,直至全部顶点均已输出,或者当前图中不存在无前驱的顶点为止.后一种情况说明有向图中存在环! 代码: #

有向无环图(DAG)拓扑排序的两种方法

如下图的DAG: 第一种: (1)从AOV网中选择一个没有前驱的顶点并且输出它: (2)从AOV网中删除该顶点,并且上去所有该顶点为尾的弧: (3)重复上述两步,直到全部顶点都被输出,或者AOV网中不存在没有前驱的顶点. 第二种: 使用深度优先搜索(DFS),并标记每一个节点的第一次访问(pre)和最后一次访问时间(post),最后post的逆序就是DAG的拓扑排序,其实也是节点在进行DFS搜索时,出栈的逆序就是拓扑排序. 拓扑序列的结果有: (1) c++,高等数学,离散数学,数据结构,概率论

将单链表排序的两种方法

对单链表排序,通常有两种方法.(PS:考察一个程序员的C语言编程功底,通常看他是否能娴熟的操作链表就知道了.) 方法1:将每一个结点保存到额外的数组中,对数组进行排序,然后根据有序的数组重新构建链表. 方法2:直接对链表进行插入排序,但是实现起来比较复杂一些. 显然,方法1最为简单,因为将链式存储L先转化为顺序存储a[],对顺序存储a[]排序,就避免了较为复杂的链接指针操作.一旦对顺序存储a[]排好序后,根据a[]重新构建一个链表是易如反掌的事情. 1. 单链表的定义如下 typedef str

python list排序的两种方法及实例讲解

对List进行排序,Python提供了两个方法 方法1.用List的内建函数list.sort进行排序 list.sort(func=None, key=None, reverse=False) Python实例: >>> list = [2,5,8,9,3] >>> list [2,5,8,9,3] >>> list.sort() >>> list [2, 3, 5, 8, 9] 方法2.用序列类型函数sorted(list)进行排