[Java開発の道](21)ComparatorとComparable

63537 ワード

1. Comparable

  
  
  
  
  1. package java.lang;
  2. import java.util.*;
  3. public interface Comparable<T> {
  4.    public int compareTo(T o);
  5. }

Comparable Comparable , 。 Comparable List ( ), List ( )  Collections.sort( Arrays.sort)


x.compareTo(y) “ x y ”。 “ ”, “x y ”; “ ”, “x y”; “ ”, “x y”。


   
   
   
   
  1. package com.qunar.test;
  2. /**
  3. * Created by xiaosi on 16-3-7.
  4. */
  5. public class Student implements Comparable<Student>{
  6.    private String name;
  7.    private int age;
  8.    public Student(String name, int age) {
  9.        this.name = name;
  10.        this.age = age;
  11.    }
  12.    public String getName() {
  13.        return name;
  14.    }
  15.    public void setName(String name) {
  16.        this.name = name;
  17.    }
  18.    public int getAge() {
  19.        return age;
  20.    }
  21.    public void setAge(int age) {
  22.        this.age = age;
  23.    }
  24.    @Override
  25.    public int compareTo(Student stu) {
  26.        if(age == stu.getAge()){
  27.            return name.compareTo(stu.getName());
  28.        }//if
  29.        else if(age > stu.getAge()){
  30.            return 1;
  31.        }
  32.        return -1;
  33.    }
  34. }



   
   
   
   
  1.        List<Student> stus = new ArrayList<Student>();
  2.        stus.add(new Student("xiaosi",24));
  3.        stus.add(new Student("sunny",24));
  4.        stus.add(new Student("yoona",21));
  5.        stus.add(new Student("kim",27));
  6.        Collections.sort(stus);
  7.        for(Student stu : stus){
  8.            System.out.println("age" + stu.getAge() + "   name->" + stu.getName());
  9.        }

: student age , , name 。


2. Comparator


  
  
  
  
  1. package java.util;
  2. public interface Comparator<T> {
  3.    int compare(T o1, T o2);
  4.    boolean equals(Object obj);
  5. }

, Comparable 。 。 Comparator 。 , 。


   
   
   
   
  1. package com.qunar.test;
  2. /**
  3. * Created by xiaosi on 16-3-7.
  4. */
  5. public class Teacher {
  6.    private String name;
  7.    private int age;
  8.    public Teacher(String name, int age) {
  9.        this.name = name;
  10.        this.age = age;
  11.    }
  12.    public String getName() {
  13.        return name;
  14.    }
  15.    public void setName(String name) {
  16.        this.name = name;
  17.    }
  18.    public int getAge() {
  19.        return age;
  20.    }
  21.    public void setAge(int age) {
  22.        this.age = age;
  23.    }
  24. }


   
   
   
   
  1. package com.qunar.test;
  2. import java.util.Comparator;
  3. /**
  4. * Created by xiaosi on 16-3-7.
  5. * Teacher
  6. */
  7. public class TeacherComparator implements Comparator<Teacher>{
  8.    @Override
  9.    public int compare(Teacher o1, Teacher o2) {
  10.        if(o1.getAge() == o2.getAge()){
  11.            return o1.getName().compareTo(o2.getName());
  12.        }//if
  13.        else if(o1.getAge() > o2.getAge()){
  14.            return 1;
  15.        }
  16.        return -1;
  17.    }
  18. }


   
   
   
   
  1.        List<Teacher> teachers = new ArrayList<Teacher>();
  2.        teachers.add(new Teacher("xiaosi",24));
  3.        teachers.add(new Teacher("sunny",24));
  4.        teachers.add(new Teacher("yoona",21));
  5.        teachers.add(new Teacher("kim",27));
  6.        Collections.sort(teachers,new TeacherComparator());
  7.        for(Teacher te : teachers){
  8.            System.out.println("age" + te.getAge() + "   name->" + te.getName());
  9.        }

3.

Comparable  ( String、Integer )。 Comparator  , 。 , 。

Comparator (strategy design pattern), , (strategy object) 。 : ,Integer , Integer ( ) , Comparator 。

Comparable : , , ,

Comparator : ,