黑马程序员一java集合中的排序之comparable和Comparator 的区别
2014-12-01 10:17
537 查看
------- <a href="http://www.itheima.com" target="blank">android培训</a>、<a href="http://www.itheima.com" target="blank">java培训</a>、期待与您交流! ----------
在说到java集合中排序的,我们肯定要提到comparable和Comparator,
首先他们都是接口,都是需要覆写各自对应的方法的,
只是Comparable是在集合内部定义的方法实现的排序,Comparator是在集合外部实现的排序,
所以在用到排序时,就必须根据需要,在集合外根据Comparator接口的实现类,覆写compare()方法,
并在需要调用的类中,把实现类的对象传进构造方法中。
或在集合内实现Comparable接口,在调用类上实现该接口,并覆写compartTo()方法
下面为两个小例子:
例一: Comparator是在集合外部实现
该例子定义了一个TreeSet数组,在数组中加入了一些字符串数据,并根据字符串的长度进行排序
import java.util.Comparator;
import java.util.Iterator;
import java.util.TreeSet;
public class GenericDemo
{
public static void main(String[] args)
{
TreeSet <String> ts=new TreeSet<String>(new LenComparator());
ts.add("abcd");
ts.add("cc");
ts.add("cba");
ts.add("aaa");
ts.add("z");
ts.add("hahaha");
Iterator<String> it =ts.iterator();
while(it.hasNext())
{
String s=it.next();
System.out.println(s);
}
}
}
class LenComparator implements Comparator<String>
{
public int compare(String o1,String o2)
{
int num=new Integer(o1.length())
.compareTo(new Integer(o2.length()));
if(num==0)
{
return o1.compareTo(o2);
}
return num;
}
}
例二:集合内实现Comparable接口
该例子定义了一个学生,实现了Comparable接口,并在方法中根据年龄大小进行排序
但当年龄相同时,则根据学生的姓名属性进行判断
class Student_2 implements Comparable
{
private String name;
private int age;
public String getName()
{
return name;
}
public void setName(String name)
{
this.name = name;
}
public int getAge()
{
return age;
}
public void setAge(int age)
{
this.age = age;
}
Student_2 (String name,int age)
{
this.name=name;
this.age=age;
}
public int compareTo(Object obj)
{
if(!(obj instanceof Student_2))
throw new RuntimeException("不是学生对象");
Student_2 s=(Student_2)obj;
// System.out.println(this.name+"."
// + ".compatrTo..."+s.name);
if(this.age>s.age)
return 1;
if(this.age==s.age)
{
return this.name.compareTo(s.name);
}
return -1;
}
}
注意:两种排序都存在时,以外部比较器comparator为主
在说到java集合中排序的,我们肯定要提到comparable和Comparator,
首先他们都是接口,都是需要覆写各自对应的方法的,
只是Comparable是在集合内部定义的方法实现的排序,Comparator是在集合外部实现的排序,
所以在用到排序时,就必须根据需要,在集合外根据Comparator接口的实现类,覆写compare()方法,
并在需要调用的类中,把实现类的对象传进构造方法中。
或在集合内实现Comparable接口,在调用类上实现该接口,并覆写compartTo()方法
下面为两个小例子:
例一: Comparator是在集合外部实现
该例子定义了一个TreeSet数组,在数组中加入了一些字符串数据,并根据字符串的长度进行排序
import java.util.Comparator;
import java.util.Iterator;
import java.util.TreeSet;
public class GenericDemo
{
public static void main(String[] args)
{
TreeSet <String> ts=new TreeSet<String>(new LenComparator());
ts.add("abcd");
ts.add("cc");
ts.add("cba");
ts.add("aaa");
ts.add("z");
ts.add("hahaha");
Iterator<String> it =ts.iterator();
while(it.hasNext())
{
String s=it.next();
System.out.println(s);
}
}
}
class LenComparator implements Comparator<String>
{
public int compare(String o1,String o2)
{
int num=new Integer(o1.length())
.compareTo(new Integer(o2.length()));
if(num==0)
{
return o1.compareTo(o2);
}
return num;
}
}
例二:集合内实现Comparable接口
该例子定义了一个学生,实现了Comparable接口,并在方法中根据年龄大小进行排序
但当年龄相同时,则根据学生的姓名属性进行判断
class Student_2 implements Comparable
{
private String name;
private int age;
public String getName()
{
return name;
}
public void setName(String name)
{
this.name = name;
}
public int getAge()
{
return age;
}
public void setAge(int age)
{
this.age = age;
}
Student_2 (String name,int age)
{
this.name=name;
this.age=age;
}
public int compareTo(Object obj)
{
if(!(obj instanceof Student_2))
throw new RuntimeException("不是学生对象");
Student_2 s=(Student_2)obj;
// System.out.println(this.name+"."
// + ".compatrTo..."+s.name);
if(this.age>s.age)
return 1;
if(this.age==s.age)
{
return this.name.compareTo(s.name);
}
return -1;
}
}
注意:两种排序都存在时,以外部比较器comparator为主
相关文章推荐
- java中对集合或数组进行排序有两种方法:Comparable 与 Comparator
- 集合的排序,COmparable和Comparator的区别
- [基础回顾-JAVA类集框架篇] 之 集合排序Comparable与Comparator(下)
- java集合中对象某属性比较排序Comparable与Comparator
- Java://Comparator、Comparable的用法(按照要求将set集合的数据进行排序输出):
- 黑马程序员_java--comparable和Comparator 的区别
- java集合中对象某属性比较排序Comparable与Comparator
- java 集合排序(Comparable、Comparator)
- Java中,如果想要排序,实现Comparator接口 //与Comparable 的区别?
- 黑马程序员------TreeSet集合框架存储自定义元素之排序Comparable与Comparator
- [基础回顾-JAVA类集框架篇] 之 集合排序Comparable与Comparator(上)
- java集合中对象某属性比较排序Comparable与Comparator
- [基础回顾-JAVA类集框架篇] 之 集合排序Comparable与Comparator(中)
- java排序和Comparable,Comparator两个接口区别
- 使用Comparable和Comparator对Java集合对象进行排序
- Java集合排序方法comparable和comparator的总结
- java集合中对象某属性比较排序Comparable与Comparator
- Java集合排序方法comparable和comparator的总结
- OpenJDK源码研究笔记(二)-Comparable和Comparator2个接口的作用和区别(一道经典的Java笔试面试题)
- java对象排序-Comparator和Comparable