`
ganjp
  • 浏览: 72167 次
  • 性别: Icon_minigender_1
  • 来自: 其实还可以
社区版块
存档分类
最新评论

effective java之【考虑实现comparable接口】

阅读更多

应用场景>>>要实现对对象的排序   如:根据名称进行排序  在展示的时候就可以让用户根据字母的顺序进行选择,更清晰和快捷

 

compareTo()方法是java.lang.Comparable接口的唯一方法。一个类实现了Comparable接口就表明这个实例在内在有排序关系。

        若把实例都存在数组a中 实例对象实现了Comparable接口 那么可以简单的调用:

                      Arrays.sort(a);完成对数据的排序。

        同理如果实例存在list中 或者 set中,可以调用:

                      Collections.sort(list);进行快速的排序。就不需要自己去费劲的排序了,你所需要做的就是制定类的排序规则,即重写compareTo()方法。

    在看例子之前我们先了解下Comparable规范:

 a.将当前对象与指定对象进行顺序比较,当对象小于、等于或大于指定对象的时候分别返回一个负整数 零 或者正整数,指定的对象类型而无法进行比较的时候 就跑出ClassCastException 

 

写道
package com.test;

@SuppressWarnings("unchecked")
public class UserModel implements Comparable{

@Override
public String toString() {
return this.userid + " " + this.name + " " + this.age;
}

private String userid;
private String name;
private int age;

public UserModel() {}

public UserModel(String userid,String name,int age) {
this.userid = userid;
this.name = name;
this.age = age;
}

public String getUserid() {
return userid;
}
public void setUserid(String userid) {
this.userid = userid;
}
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;
}

//Comparator接口的compare()方法 返回一个小于0的数,表示比较的两个对象中,前者小于后者
//如果是等于0 表示两个对象相等 如果大于0 表示前者大于后者
public int compareTo(Object o) {
UserModel userModel = (UserModel)o;
if(this.age > userModel.getAge()) {
return 1;
}
if(this.age < userModel.getAge()) {
return -1;
}
return 0;
}
}

   测试

 

写道
package com.test;

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

@SuppressWarnings("unchecked")
public class SortClient {

public static void main(String[] args) {

UserModel userModel5 = new UserModel("5","user1",15);
UserModel userModel1 = new UserModel("1","user1",10);
UserModel userModel2 = new UserModel("2","user1",14);
UserModel userModel3 = new UserModel("3","user1",11);
UserModel userModel4 = new UserModel("4","user1",14);

List list = new ArrayList();

list.add(userModel5);
list.add(userModel1);
list.add(userModel2);
list.add(userModel3);
list.add(userModel4);

System.out.println("排序前-----------");
printList(list);

Collections.sort(list);

System.out.println("排序后-----------");
printList(list);

}


public static void printList(List list){
for(int i = 0 ; i < list.size() ; i ++) {
System.out.println((UserModel)list.get(i));
}
}

// 这里只是简单的说明了下   进行比较也可以 实现new java.util.comparator(){ 在这里实现}
public static void sortMethodTwo() {
//也可以通过Collections.sort()方法 把Comparator方法传进去 在comparator方法中定义自己的比较算法
Comparator comparator = new Comparator(){
public int compare(Object o1, Object o2) {
UserModel user1 = (UserModel)o1;
UserModel user2 = (UserModel)o2;
if(user1.getAge() > user2.getAge()) {
return 1;
}
if(user1.getAge() < user2.getAge()) {
return -1;
}
return 0;
}};
}
}

 

分享到:
评论

相关推荐

    Effective Java第三版1

    5. **Comparable接口**:实现`Comparable`接口可以让类的对象进行自然排序,适用于`Collections.sort()`或`Arrays.sort()`。 ### 第四章 类和接口 这一章可能涵盖类的设计原则,如: 1. **接口设计**:接口应简洁,...

    effective java 读书笔记

    - Item12:实现Comparable接口使对象能够自我比较,这对于排序和集合操作非常有用。 5. **类和接口的设计** - Item13:尽可能限制类和成员的访问级别,以提供封装和安全性。 - Item14:public类中的字段应通过...

    effecctivejava 第三版中文

    11. **比较对象的正确方式**:实现Comparable接口或使用Comparator接口来比较对象。注意equals()和hashCode()的一致性原则。 12. **优先考虑异常安全的函数**:设计函数时,应尽量避免在正常路径上抛出异常,避免...

    EffectiveJava

    《Effective Java》是Java开发领域的一本经典著作,由Joshua Bloch撰写,它为Java程序员提供了一系列实用的编程准则和最佳实践。本书分为九个部分,涵盖了23个编程项,旨在帮助开发者写出更高效、更可靠、更易于维护...

    java源码测试-effective-java:读EffectiveJava(中文版第3版)阅读源码测试案列

    10. **比较器与自然排序**:讲解了`Comparator`接口的使用,以及如何正确地实现`Comparable`接口。 11. **异常处理**:建议避免使用`Exception`作为捕获类型,鼓励精确地捕获和处理异常。 12. **并发编程**:探讨...

    EFFECT JAVA 中文

    4. **枚举代替常量类**:枚举类型在Java中提供了许多优势,如自动实现Comparable接口,可以添加方法,以及防止实例化。作者推荐使用枚举来替代传统的final常量类。 5. **不可变对象**:不可变对象一旦创建,其状态...

    Effictive Java

    8. **比较器与自然排序**:如果类需要排序,要么实现Comparable接口,提供自然排序,要么提供一个Comparator,以实现自定义排序逻辑。 9. **预判与延迟初始化**:预判是在可能需要之前就初始化,而延迟初始化则是在...

Global site tag (gtag.js) - Google Analytics