关于引用数据类型的排序(自然排序和客户化排序)
2011-03-13 11:01
417 查看
关于引用数据类型的排序(自然排序和客户化排序):
1.对象本身实现Comparable接口,那么该类的实例就是可以排序的(实现其comparTo()方法).
只要实现了Comparable接口,就可以调用Collections的sort方法对集合中的元素排序.
2.实现Comparator接口的一个实例也可以实现排序功能.
看一下Comparator的全部内容:
public interface Comparator {
int compare(Object o1, Object o2);
boolean equals(Object obj);
}
定义了两个方法,我们一般都只需要实现compare方法。
为什么呢?
因为所有自定义类默认extends Object,而Object中已经将equals()实现
Comparator一般都作为一个匿名类出现,对于没有实现Comparable的对象的集合,排序的时候
需要指定一个Comparator.
这里举例说明
对于实现了Comparable的类(自然排序)我们就用最简单的Integer
List list=new ArrayList();
list.add(new Integer(3));
list.add(new Integer(53));
list.add(new Integer(34));
Collections.sort(list);
对于没有实现Comparable的,我们就用Object,按照hashCode大小来排序.
List list= new ArrayList();
list.add(new Object());
list.add(new Object());
list.add(new Object());
Collections.sort(list,new Comparator(){ public int compare(Object o1, Object o2){
return (o1.hashCode()-o2.hashCode());
})
这里定义了一个排序规则,以匿名类的形式出现,当然你也可以定义一个自定义的类实现Comparator,
这样这个“排序规则”就能得以保存。
那Comparable 和 Comparator 接口有什么区别呢?
“白话文”的解释:用自定义类实现Comparable接口,那么这个类就具有排序功能,Comparable和具体你要进行排序的类的实例邦定。而Comparator比较灵活,它没有和任何类绑定,实现它的自定义类仅仅定义了一种排序方式或排序规则。不言而喻,这种方式比较灵活。我们的要排序的类可以分别和多个实现Comparator接口的类绑定,从而达到可以按自己的意愿实现按多种方式排序的目的。Comparable——“静态绑定排序”,Comparator——“动态绑定排序”。
1.对象本身实现Comparable接口,那么该类的实例就是可以排序的(实现其comparTo()方法).
只要实现了Comparable接口,就可以调用Collections的sort方法对集合中的元素排序.
2.实现Comparator接口的一个实例也可以实现排序功能.
看一下Comparator的全部内容:
public interface Comparator {
int compare(Object o1, Object o2);
boolean equals(Object obj);
}
定义了两个方法,我们一般都只需要实现compare方法。
为什么呢?
因为所有自定义类默认extends Object,而Object中已经将equals()实现
Comparator一般都作为一个匿名类出现,对于没有实现Comparable的对象的集合,排序的时候
需要指定一个Comparator.
这里举例说明
对于实现了Comparable的类(自然排序)我们就用最简单的Integer
List list=new ArrayList();
list.add(new Integer(3));
list.add(new Integer(53));
list.add(new Integer(34));
Collections.sort(list);
对于没有实现Comparable的,我们就用Object,按照hashCode大小来排序.
List list= new ArrayList();
list.add(new Object());
list.add(new Object());
list.add(new Object());
Collections.sort(list,new Comparator(){ public int compare(Object o1, Object o2){
return (o1.hashCode()-o2.hashCode());
})
这里定义了一个排序规则,以匿名类的形式出现,当然你也可以定义一个自定义的类实现Comparator,
这样这个“排序规则”就能得以保存。
那Comparable 和 Comparator 接口有什么区别呢?
“白话文”的解释:用自定义类实现Comparable接口,那么这个类就具有排序功能,Comparable和具体你要进行排序的类的实例邦定。而Comparator比较灵活,它没有和任何类绑定,实现它的自定义类仅仅定义了一种排序方式或排序规则。不言而喻,这种方式比较灵活。我们的要排序的类可以分别和多个实现Comparator接口的类绑定,从而达到可以按自己的意愿实现按多种方式排序的目的。Comparable——“静态绑定排序”,Comparator——“动态绑定排序”。
相关文章推荐
- Java学习之数组1(1.数组的声明;2.元素为引用数据类型的数组;3.关于main方法里的String[] args;4.数组排序;5.数3退1 数组算法,(用数组模拟链表);6数组查找之二分法;7数组的拷贝)
- Java容器-引用数据类型排序+TreeSet、TreeMap底层实现
- java例程练习(引用类型数据的排序和查找)[外篇]
- [内置引用数据类型]——排序
- java例程练习(引用类型数据的排序和查找)[外篇]
- java例程练习(引用类型数据的排序和查找)[外篇]
- java例程练习(引用类型数据的排序和查找)[外篇]
- 排序 引用数据类型
- C++ STL 有关于SET集合的基本操作,本文不包含涉及到自定义数据类型的排序
- java引用数据类型的排序总结(内置类,自定义类,容器类)
- 关于创建对象数组的引用数据类型空指针异常问题
- 一个关于JavaScript引用数据类型指针的小题
- 关于Java基本数据类型与引用数据类型的简述
- ECMAScript——引用数据类型之function关于call和apply
- 关于引用数据类型与基本数据类型的认识
- 关于数组的基本数据类型和引用类型
- Java (引用数据类型)排序
- C++ STL 有关于SET集合部分 的自定义数据类型的排序 以及 pair的使用
- 写一个方法对任意引用数据类型数组进行排序(入门级慎看,很难!!!)
- 关于引用数据类型的形参与实参讨论