`

java.lang.Comparable 和java.util.Comparator

    博客分类:
  • JAVA
 
阅读更多

一个类实现了java.lang.Comparable接口表明这个类的对象之间是可以进行相互比较的,这个类对象组成的集合就可以直接使用Collections.sort()方法排序。

java.util.Comparator可看成是算法的实现,将算法和数据分离,可在以下两种环境下使用:

1.类的设计师没有考虑到比较问题而没有实现Comparable接口,可以通过Comparator排序而不用改变对象本身

2.可以使用多种排序标准,升序,降序

 

第一种方法:实现java.lang.Comparator接口进行排序

 

public class User implements Comparable{
 private String name;
 private int age;
 private String address;
 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;
 }
 public String getAddress() {
  return address;
 }
 public void setAddress(String address) {
  this.address = address;
 }
 public int compareTo(Object o) {
  // TODO Auto-generated method stub
  User user = (User)o;
  if (age > user.getAge()){
   return 1;
  } else if (age == user.getAge()){
   return 0;
  } else {
   return -1;
  }
 }
}

 

public class ComparableTest {
 
 @SuppressWarnings("unchecked")
 @Test
 public void comparable(){
  List<User> userList = new ArrayList<User>();
  User user = new User();
  user.setAddress("北京");
  user.setAge(15);
  user.setName("张三");
  userList.add(user);
  user = new User();
  user.setAddress("上海");
  user.setAge(25);
  user.setName("李四");
  userList.add(user);
  user = new User();
  user.setAddress("广州");
  user.setAge(18);
  user.setName("王五");
  userList.add(user);
  user = new User();
  user.setAddress("香港");
  user.setAge(35);
  user.setName("马六");
  userList.add(user);
  
  Collections.sort(userList);
  for (User u:userList){
   System.out.println(u.getAge()+","+u.getName()+","+u.getAddress());
  }
 }
}

 

第二种方法: 定义比较算法,实现java.util.Comparator接口

 

public class User {
 private String name;
 private int age;
 private String address;
 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;
 }
 public String getAddress() {
  return address;
 }
 public void setAddress(String address) {
  this.address = address;
 }
}

 

public class NewComparator implements Comparator<User>{
 public int compare(User user1, User user2) {
  // TODO Auto-generated method stub
  if (user1.getAge() > user2.getAge()){
   return 1;
  } else if (user1.getAge() == user2.getAge()){
   return 0;
  } else {
   return -1;
  }
 }
}

 

public class ComparatorTest {
 
 @SuppressWarnings("unchecked")
 @Test
 public void comparatorTest(){
  List<User> userList = new ArrayList<User>();
  User user = new User();
  user.setAddress("北京");
  user.setAge(15);
  user.setName("张三");
  userList.add(user);
  user = new User();
  user.setAddress("上海");
  user.setAge(25);
  user.setName("李四");
  userList.add(user);
  user = new User();
  user.setAddress("广州");
  user.setAge(18);
  user.setName("王五");
  userList.add(user);
  user = new User();
  user.setAddress("香港");
  user.setAge(35);
  user.setName("马六");
  userList.add(user);
  
  Collections.sort(userList,new NewComparator());
  for (User u:userList){
   System.out.println(u.getAge()+","+u.getName()+","+u.getAddress());
  }
 }
}

分享到:
评论

相关推荐

    java排序Comparator和Comparable

    首先,`Comparable`接口是Java.lang包下的一个接口,它只有一个方法`compareTo(T o)`。任何类如果想要实现自然排序,即按照类定义的规则进行排序,都可以实现这个接口。例如,`String`类就实现了`Comparable`接口,...

    Java中Comparable和Comparator的区别

    在Java编程语言中,Comparable和Comparator接口是两个非常重要的组件,它们主要用来进行对象的比较和排序。了解它们之间的区别对于提升代码的可维护性和灵活性至关重要。 Comparable接口来源于java.lang包,它定义...

    Java SE编程入门教程 java泛型(共11页).pptx

    - `java.util.Comparator`和`java.lang.Comparable`:用于对象之间的比较。 这些主题共同构成了Java SE的基础,是理解和开发Java应用程序的关键。通过学习这些概念,开发者能够创建安全、高效和可维护的代码。

    java中Comparable和Comparator的区别

    Java中的Comparable和Comparator接口在处理数据排序时都扮演着重要角色,但它们有着明显的区别。 **Comparable接口** 是Java基础语言包`java.lang`的一部分,它定义了一个单一的方法`compareTo(T o)`。任何实现了...

    Comparable&Comparator区别

    import java.util.Comparator; public class CustomerComparator implements Comparator&lt;Customer&gt; { @Override public int compare(Customer c1, Customer c2) { // 首先比较年龄 if (c1.getAge() &lt; c2.getAge...

    Java_api查看.rar

    - `Comparable`和`Comparator`接口常用于排序操作,实现了这两个接口的对象可以进行比较。 5. **异常处理**: - Java使用异常处理机制来处理运行时错误。异常类位于`java.lang.Throwable`及其子类,如`...

    Comparable与Comparator的区别Java开

    在Java编程语言中,`Comparable`接口和`Comparator`接口是两种重要的排序机制,它们用于对集合中的对象进行比较和排序。理解它们的区别对于任何Java开发者来说都是至关重要的。 首先,`Comparable`接口位于`java....

    Java Comparable和Comparator对比详解

    Java Comparable和Comparator对比详解 Java 中的 Comparable 和 Comparator 是两个常用的接口,用于实现对象的比较和排序。它们都是 Java 中的接口,都是用于比较对象的大小的,但它们有所不同。 Comparable 接口 ...

    详解Java中Comparable和Comparator接口的区别

    Java 中的 Comparable 和 Comparator 接口详解 Java 中的 Comparable 和 Comparator 接口都是用于比较和排序的,但是它们之间存在着一些关键的区别。Comparable 是一个排序接口,若一个类实现了 Comparable 接口,...

    Comparable与Comparator的区别

    在Java编程语言中,Comparable和Comparator是两个非常重要的接口,它们都用于对象的比较和排序。下面是关于这两个接口的详细解释: **Comparable接口** Comparable接口位于`java.lang`包下,它是一个对象自比较的...

    java 中Comparable与Comparator详解与比较

    在Java编程语言中,Comparable和Comparator接口用于比较对象的顺序,尤其在进行排序操作时非常关键。两者虽然目的相似,但使用方式和应用场景有所区别。 Comparable接口定义在`java.lang`包中,它只有一个方法`...

    基于Java的技术点实现整合

    7. **字符处理**:Java的`java.lang.String`类和`java.text`包提供了丰富的字符串和字符处理功能。例如,可以使用StringBuffer或StringBuilder进行字符串拼接,使用Character类进行字符判断和转换,使用Formatter类...

    ArraySort排序

    总之,`ArraySort`的核心在于理解并正确使用`Comparator`和`Comparable`接口,它们是Java中进行数组和列表排序的基础。熟练掌握这两个接口的使用,能够帮助开发者灵活地处理各种排序需求,提高代码的可复用性和可...

    java api大集合

    - **`Comparable`和`Comparator`**:定义元素的自然排序和自定义排序。 3. **多线程** - **`java.lang.Thread`**:表示一个执行线程,通过`start()`方法启动。 - **`synchronized`关键字**:用于同步方法或代码...

    Java中interface接口的作用

    此外,Java标准库中的`java.util.Comparator`和`java.lang.Comparable`接口是两个常见的示例。`Comparator`用于比较对象,实现该接口的类可以自定义比较规则;`Comparable`则定义了一个通用的排序规则,实现了这个...

    Java对象的比较方式.pdf

    Comparable接口是Java.lang包中的一个接口,提供了一个自然排序方式。该接口适用于一个类有自然顺序,例如String和Integer等Java内建类。实现Comparable接口需要实现compareTo(Object o)方法,该方法比较当前实例...

    JavaAPI超全

    - 接口与实现:Iterable、Iterator、Comparable、Comparator,这些接口在处理集合时经常用到。 3. **并发处理API**: - `java.util.concurrent`包:提供了线程池、并发容器、同步工具类,如ExecutorService、...

    Java 的常用包与数组的复制与排序27

    Java标准库中有许多内置的包,如`java.lang`、`java.util`和`java.io`等。 1. `java.lang`:这是所有Java程序的基础,因为它包含了运行任何Java程序都需要的基本类,比如`Object`、`String`、`System`等。`Object`...

    Java对象的比较方式.doc

    Java提供了两种主要的方式来实现对象之间的比较,即`Comparable`接口和`Comparator`接口。这两种接口使得自定义对象可以根据特定的规则进行排序。 首先,`Comparable`接口是Java的`java.lang`包中的一个基础接口,...

Global site tag (gtag.js) - Google Analytics