So sánh ký tự trong java năm 2024

Nếu bạn nhớ [Dasha, Masha, Sasha]

7lớp và [Dasha, Masha, Sasha]

8phương thức của nó, thì tốt lắm! Tôi nghĩ bạn cũng sẽ không gặp rắc rối với những con số. Đây là một nhiệm vụ khó khăn hơn cho bạn: public class Car { private int manufactureYear; private String model; private int maxSpeed; public Car(int manufactureYear, String model, int maxSpeed) { this.manufactureYear = manufactureYear; this.model = model; this.maxSpeed = maxSpeed; } // ...getters, setters, toString() } import java.util.ArrayList; import java.util.List; public class Main { public static void main(String[] args) { List<Car> cars = new ArrayList<>(); Car ferrari = new Car(1990, "Ferrari 360 Spider", 310); Car lambo = new Car(2012, "Lamborghini Gallardo", 290); Car bugatti = new Car(2010, "Bugatti Veyron", 350); cars.add(ferrari); cars.add(bugatti); cars.add(lambo); } }

Nhiệm vụ thực sự đơn giản. Chúng ta có một [Dasha, Masha, Sasha]

9lớp và 3 đối tượng Car. Bạn vui lòng sắp xếp những chiếc xe trong danh sách? Bạn có thể sẽ hỏi, "Làm thế nào chúng nên được sắp xếp?" Bằng tên? Theo năm sản xuất? Bằng tốc độ tối đa? Câu hỏi tuyệt vời. Hiện tại, chúng tôi không biết cách sắp xếp các [Dasha, Masha, Sasha]

9đối tượng. Và, một cách hoàn toàn tự nhiên, Java cũng không biết điều đó! Khi chúng tôi cố gắng chuyển một danh sách [Dasha, Masha, Sasha]

9các đối tượng cho public class Car { private int manufactureYear; private String model; private int maxSpeed; public Car(int manufactureYear, String model, int maxSpeed) { this.manufactureYear = manufactureYear; this.model = model; this.maxSpeed = maxSpeed; } // ...getters, setters, toString() } import java.util.ArrayList; import java.util.List; public class Main { public static void main(String[] args) { List<Car> cars = new ArrayList<>(); Car ferrari = new Car(1990, "Ferrari 360 Spider", 310); Car lambo = new Car(2012, "Lamborghini Gallardo", 290); Car bugatti = new Car(2010, "Bugatti Veyron", 350); cars.add(ferrari); cars.add(bugatti); cars.add(lambo); } }

2phương thức, chúng tôi gặp lỗi: import java.util.ArrayList; import java.util.Collections; import java.util.List; public class Main { public static void main(String[] args) { List<Car> cars = new ArrayList<>(); Car ferrari = new Car(1990, "Ferrari 360 Spider", 310); Car lambo = new Car(20012, "Lamborghini Gallardo", 290); Car bugatti = new Car(2010, "Bugatti Veyron", 350); cars.add(ferrari); cars.add(bugatti); cars.add(lambo); // Compilation error! Collections.sort(cars); } }

Và thực sự, làm thế nào để ngôn ngữ biết cách sắp xếp các đối tượng của các lớp mà bạn đã viết? Điều này phụ thuộc vào những gì chương trình của bạn cần làm. Bằng cách nào đó, chúng ta phải dạy Java so sánh các đối tượng này. Và để so sánh chúng theo cách chúng ta muốn. Java có một cơ chế đặc biệt cho việc này: public class Car { private int manufactureYear; private String model; private int maxSpeed; public Car(int manufactureYear, String model, int maxSpeed) { this.manufactureYear = manufactureYear; this.model = model; this.maxSpeed = maxSpeed; } // ...getters, setters, toString() } import java.util.ArrayList; import java.util.List; public class Main { public static void main(String[] args) { List<Car> cars = new ArrayList<>(); Car ferrari = new Car(1990, "Ferrari 360 Spider", 310); Car lambo = new Car(2012, "Lamborghini Gallardo", 290); Car bugatti = new Car(2010, "Bugatti Veyron", 350); cars.add(ferrari); cars.add(bugatti); cars.add(lambo); } }

3giao diện. Để bằng cách nào đó so sánh và sắp xếp [Dasha, Masha, Sasha]

9các đối tượng của chúng ta, lớp phải triển khai giao diện này, bao gồm một phương thức duy nhất: public class Car { private int manufactureYear; private String model; private int maxSpeed; public Car(int manufactureYear, String model, int maxSpeed) { this.manufactureYear = manufactureYear; this.model = model; this.maxSpeed = maxSpeed; } // ...getters, setters, toString() } import java.util.ArrayList; import java.util.List; public class Main { public static void main(String[] args) { List<Car> cars = new ArrayList<>(); Car ferrari = new Car(1990, "Ferrari 360 Spider", 310); Car lambo = new Car(2012, "Lamborghini Gallardo", 290); Car bugatti = new Car(2010, "Bugatti Veyron", 350); cars.add(ferrari); cars.add(bugatti); cars.add(lambo); } }

5: public class Car implements Comparable<Car> { private int manufactureYear; private String model; private int maxSpeed; public Car(int manufactureYear, String model, int maxSpeed) { this.manufactureYear = manufactureYear; this.model = model; this.maxSpeed = maxSpeed; } @Override public int compareTo(Car o) { return 0; } // ...getters, setters, toString() }

Xin lưu ýmà chúng tôi đã chỉ định public class Car { private int manufactureYear; private String model; private int maxSpeed; public Car(int manufactureYear, String model, int maxSpeed) { this.manufactureYear = manufactureYear; this.model = model; this.maxSpeed = maxSpeed; } // ...getters, setters, toString() } import java.util.ArrayList; import java.util.List; public class Main { public static void main(String[] args) { List<Car> cars = new ArrayList<>(); Car ferrari = new Car(1990, "Ferrari 360 Spider", 310); Car lambo = new Car(2012, "Lamborghini Gallardo", 290); Car bugatti = new Car(2010, "Bugatti Veyron", 350); cars.add(ferrari); cars.add(bugatti); cars.add(lambo); } }

6giao diện, không chỉ public class Car { private int manufactureYear; private String model; private int maxSpeed; public Car(int manufactureYear, String model, int maxSpeed) { this.manufactureYear = manufactureYear; this.model = model; this.maxSpeed = maxSpeed; } // ...getters, setters, toString() } import java.util.ArrayList; import java.util.List; public class Main { public static void main(String[] args) { List<Car> cars = new ArrayList<>(); Car ferrari = new Car(1990, "Ferrari 360 Spider", 310); Car lambo = new Car(2012, "Lamborghini Gallardo", 290); Car bugatti = new Car(2010, "Bugatti Veyron", 350); cars.add(ferrari); cars.add(bugatti); cars.add(lambo); } }

3. Đây là một giao diện được tham số hóa, tức là chúng ta phải chỉ định lớp liên quan cụ thể. Về nguyên tắc, bạn có thể xóa public class Car { private int manufactureYear; private String model; private int maxSpeed; public Car(int manufactureYear, String model, int maxSpeed) { this.manufactureYear = manufactureYear; this.model = model; this.maxSpeed = maxSpeed; } // ...getters, setters, toString() } import java.util.ArrayList; import java.util.List; public class Main { public static void main(String[] args) { List<Car> cars = new ArrayList<>(); Car ferrari = new Car(1990, "Ferrari 360 Spider", 310); Car lambo = new Car(2012, "Lamborghini Gallardo", 290); Car bugatti = new Car(2010, "Bugatti Veyron", 350); cars.add(ferrari); cars.add(bugatti); cars.add(lambo); } }

8khỏi giao diện, nhưng khi đó việc so sánh sẽ public class Car { private int manufactureYear; private String model; private int maxSpeed; public Car(int manufactureYear, String model, int maxSpeed) { this.manufactureYear = manufactureYear; this.model = model; this.maxSpeed = maxSpeed; } // ...getters, setters, toString() } import java.util.ArrayList; import java.util.List; public class Main { public static void main(String[] args) { List<Car> cars = new ArrayList<>(); Car ferrari = new Car(1990, "Ferrari 360 Spider", 310); Car lambo = new Car(2012, "Lamborghini Gallardo", 290); Car bugatti = new Car(2010, "Bugatti Veyron", 350); cars.add(ferrari); cars.add(bugatti); cars.add(lambo); } }

9mặc định dựa trên các đối tượng. Thay vì import java.util.ArrayList; import java.util.Collections; import java.util.List; public class Main { public static void main(String[] args) { List<Car> cars = new ArrayList<>(); Car ferrari = new Car(1990, "Ferrari 360 Spider", 310); Car lambo = new Car(20012, "Lamborghini Gallardo", 290); Car bugatti = new Car(2010, "Bugatti Veyron", 350); cars.add(ferrari); cars.add(bugatti); cars.add(lambo); // Compilation error! Collections.sort(cars); } }

0phương thức, lớp của chúng ta sẽ có: @Override public int compareTo(Object o) { return 0; }

Tất nhiên, chúng tôi làm việc với [Dasha, Masha, Sasha]

9. Bên trong public class Car { private int manufactureYear; private String model; private int maxSpeed; public Car(int manufactureYear, String model, int maxSpeed) { this.manufactureYear = manufactureYear; this.model = model; this.maxSpeed = maxSpeed; } // ...getters, setters, toString() } import java.util.ArrayList; import java.util.List; public class Main { public static void main(String[] args) { List<Car> cars = new ArrayList<>(); Car ferrari = new Car(1990, "Ferrari 360 Spider", 310); Car lambo = new Car(2012, "Lamborghini Gallardo", 290); Car bugatti = new Car(2010, "Bugatti Veyron", 350); cars.add(ferrari); cars.add(bugatti); cars.add(lambo); } }

5phương thức, chúng tôi triển khai logic của mình để so sánh ô tô. Giả sử chúng ta cần sắp xếp chúng theo năm sản xuất. Bạn có thể nhận thấy rằng public class Car { private int manufactureYear; private String model; private int maxSpeed; public Car(int manufactureYear, String model, int maxSpeed) { this.manufactureYear = manufactureYear; this.model = model; this.maxSpeed = maxSpeed; } // ...getters, setters, toString() } import java.util.ArrayList; import java.util.List; public class Main { public static void main(String[] args) { List<Car> cars = new ArrayList<>(); Car ferrari = new Car(1990, "Ferrari 360 Spider", 310); Car lambo = new Car(2012, "Lamborghini Gallardo", 290); Car bugatti = new Car(2010, "Bugatti Veyron", 350); cars.add(ferrari); cars.add(bugatti); cars.add(lambo); } }

5phương thức này trả về một import java.util.ArrayList; import java.util.Collections; import java.util.List; public class Main { public static void main(String[] args) { List<Car> cars = new ArrayList<>(); Car ferrari = new Car(1990, "Ferrari 360 Spider", 310); Car lambo = new Car(20012, "Lamborghini Gallardo", 290); Car bugatti = new Car(2010, "Bugatti Veyron", 350); cars.add(ferrari); cars.add(bugatti); cars.add(lambo); // Compilation error! Collections.sort(cars); } }

4, không phải một import java.util.ArrayList; import java.util.Collections; import java.util.List; public class Main { public static void main(String[] args) { List<Car> cars = new ArrayList<>(); Car ferrari = new Car(1990, "Ferrari 360 Spider", 310); Car lambo = new Car(20012, "Lamborghini Gallardo", 290); Car bugatti = new Car(2010, "Bugatti Veyron", 350); cars.add(ferrari); cars.add(bugatti); cars.add(lambo); // Compilation error! Collections.sort(cars); } }

5. Đừng để điều này làm bạn ngạc nhiên. Khi chúng ta so sánh hai đối tượng, có 3 khả năng xảy ra:

  • import java.util.ArrayList; import java.util.Collections; import java.util.List; public class Main { public static void main(String[] args) { List<Car> cars = new ArrayList<>(); Car ferrari = new Car(1990, "Ferrari 360 Spider", 310); Car lambo = new Car(20012, "Lamborghini Gallardo", 290); Car bugatti = new Car(2010, "Bugatti Veyron", 350); cars.add(ferrari); cars.add(bugatti); cars.add(lambo); // Compilation error! Collections.sort(cars); } }

    6
  • import java.util.ArrayList; import java.util.Collections; import java.util.List; public class Main { public static void main(String[] args) { List<Car> cars = new ArrayList<>(); Car ferrari = new Car(1990, "Ferrari 360 Spider", 310); Car lambo = new Car(20012, "Lamborghini Gallardo", 290); Car bugatti = new Car(2010, "Bugatti Veyron", 350); cars.add(ferrari); cars.add(bugatti); cars.add(lambo); // Compilation error! Collections.sort(cars); } }

    7
  • import java.util.ArrayList; import java.util.Collections; import java.util.List; public class Main { public static void main(String[] args) { List<Car> cars = new ArrayList<>(); Car ferrari = new Car(1990, "Ferrari 360 Spider", 310); Car lambo = new Car(20012, "Lamborghini Gallardo", 290); Car bugatti = new Car(2010, "Bugatti Veyron", 350); cars.add(ferrari); cars.add(bugatti); cars.add(lambo); // Compilation error! Collections.sort(cars); } }

    8.

import java.util.ArrayList; import java.util.Collections; import java.util.List; public class Main { public static void main(String[] args) { List<Car> cars = new ArrayList<>(); Car ferrari = new Car(1990, "Ferrari 360 Spider", 310); Car lambo = new Car(20012, "Lamborghini Gallardo", 290); Car bugatti = new Car(2010, "Bugatti Veyron", 350); cars.add(ferrari); cars.add(bugatti); cars.add(lambo); // Compilation error! Collections.sort(cars); } }

5chỉ có 2 giá trị: đúng và sai, không hoạt động tốt để so sánh các đối tượng. Với import java.util.ArrayList; import java.util.Collections; import java.util.List; public class Main { public static void main(String[] args) { List<Car> cars = new ArrayList<>(); Car ferrari = new Car(1990, "Ferrari 360 Spider", 310); Car lambo = new Car(20012, "Lamborghini Gallardo", 290); Car bugatti = new Car(2010, "Bugatti Veyron", 350); cars.add(ferrari); cars.add(bugatti); cars.add(lambo); // Compilation error! Collections.sort(cars); } }

4, mọi thứ đơn giản hơn nhiều. Nếu giá trị trả về là public class Car implements Comparable<Car> { private int manufactureYear; private String model; private int maxSpeed; public Car(int manufactureYear, String model, int maxSpeed) { this.manufactureYear = manufactureYear; this.model = model; this.maxSpeed = maxSpeed; } @Override public int compareTo(Car o) { return 0; } // ...getters, setters, toString() }

1, thì import java.util.ArrayList; import java.util.Collections; import java.util.List; public class Main { public static void main(String[] args) { List<Car> cars = new ArrayList<>(); Car ferrari = new Car(1990, "Ferrari 360 Spider", 310); Car lambo = new Car(20012, "Lamborghini Gallardo", 290); Car bugatti = new Car(2010, "Bugatti Veyron", 350); cars.add(ferrari); cars.add(bugatti); cars.add(lambo); // Compilation error! Collections.sort(cars); } }

7. Nếu kết quả của public class Car implements Comparable<Car> { private int manufactureYear; private String model; private int maxSpeed; public Car(int manufactureYear, String model, int maxSpeed) { this.manufactureYear = manufactureYear; this.model = model; this.maxSpeed = maxSpeed; } @Override public int compareTo(Car o) { return 0; } // ...getters, setters, toString() }

3là public class Car implements Comparable<Car> { private int manufactureYear; private String model; private int maxSpeed; public Car(int manufactureYear, String model, int maxSpeed) { this.manufactureYear = manufactureYear; this.model = model; this.maxSpeed = maxSpeed; } @Override public int compareTo(Car o) { return 0; } // ...getters, setters, toString() }

4, thì public class Car implements Comparable<Car> { private int manufactureYear; private String model; private int maxSpeed; public Car(int manufactureYear, String model, int maxSpeed) { this.manufactureYear = manufactureYear; this.model = model; this.maxSpeed = maxSpeed; } @Override public int compareTo(Car o) { return 0; } // ...getters, setters, toString() }

5. Và, nếu kết quả là public class Car implements Comparable<Car> { private int manufactureYear; private String model; private int maxSpeed; public Car(int manufactureYear, String model, int maxSpeed) { this.manufactureYear = manufactureYear; this.model = model; this.maxSpeed = maxSpeed; } @Override public int compareTo(Car o) { return 0; } // ...getters, setters, toString() }

6, thì hai đối tượng bằng nhau: import java.util.ArrayList; import java.util.Collections; import java.util.List; public class Main { public static void main(String[] args) { List<Car> cars = new ArrayList<>(); Car ferrari = new Car(1990, "Ferrari 360 Spider", 310); Car lambo = new Car(20012, "Lamborghini Gallardo", 290); Car bugatti = new Car(2010, "Bugatti Veyron", 350); cars.add(ferrari); cars.add(bugatti); cars.add(lambo); // Compilation error! Collections.sort(cars); } }

8. Dạy lớp chúng ta phân loại ô tô theo năm sản xuất thật dễ dàng: @Override public int compareTo(Car o) { return this.getManufactureYear() - o.getManufactureYear(); }

Nhưng những gì đang xảy ra ở đây? Chúng tôi lấy một đối tượng Ô tô ( public class Car implements Comparable<Car> { private int manufactureYear; private String model; private int maxSpeed; public Car(int manufactureYear, String model, int maxSpeed) { this.manufactureYear = manufactureYear; this.model = model; this.maxSpeed = maxSpeed; } @Override public int compareTo(Car o) { return 0; } // ...getters, setters, toString() }

8), lấy năm sản xuất của ô tô này và trừ đi năm sản xuất của một ô tô khác (chiếc mà đối tượng đang được so sánh với nó). Nếu năm sản xuất của chiếc ô tô đầu tiên lớn hơn, phương thức sẽ trả về một public class Car implements Comparable<Car> { private int manufactureYear; private String model; private int maxSpeed; public Car(int manufactureYear, String model, int maxSpeed) { this.manufactureYear = manufactureYear; this.model = model; this.maxSpeed = maxSpeed; } @Override public int compareTo(Car o) { return 0; } // ...getters, setters, toString() }

9. Điều này có nghĩa là chiếc @Override public int compareTo(Object o) { return 0; }

0xe @Override public int compareTo(Object o) { return 0; }

1. Ngược lại, nếu năm sản xuất của chiếc ô tô thứ hai ( @Override public int compareTo(Object o) { return 0; }

  1. lớn hơn thì phương thức sẽ trả về một số âm, nghĩa là

@Override public int compareTo(Object o) { return 0; }

3. Cuối cùng, nếu chúng bằng nhau thì phương thức sẽ trả về @Override public int compareTo(Object o) { return 0; }

4. Cơ chế đơn giản này đã đủ để chúng ta sắp xếp các bộ sưu tập [Dasha, Masha, Sasha]

9đối tượng! Bạn không phải làm bất cứ điều gì khác. Kiểm tra nó ra: import java.util.ArrayList; import java.util.Collections; import java.util.List; public class Main { public static void main(String[] args) { List<Car> cars = new ArrayList<>(); Car ferrari = new Car(1990, "Ferrari 360 Spider", 310); Car lambo = new Car(2012, "Lamborghini Gallardo", 290); Car bugatti = new Car(2010, "Bugatti Veyron", 350); cars.add(ferrari); cars.add(bugatti); cars.add(lambo); // There was previously an error here Collections.sort(cars); System.out.println(cars); } }

Đầu ra bảng điều khiển: [Car{manufactureYear=1990, model='Ferrari 360 Spider', maxSpeed=310}, Car{manufactureYear=2010, model='Bugatti Veyron', maxSpeed=350}, Car{manufactureYear=2012, model='Lamborghini Gallardo', maxSpeed=290}]

Những chiếc xe được sắp xếp như chúng ta muốn! :)

Khi nào tôi nên sử dụng public class Car { private int manufactureYear; private String model; private int maxSpeed; public Car(int manufactureYear, String model, int maxSpeed) { this.manufactureYear = manufactureYear; this.model = model; this.maxSpeed = maxSpeed; } // ...getters, setters, toString() } import java.util.ArrayList; import java.util.List; public class Main { public static void main(String[] args) { List<Car> cars = new ArrayList<>(); Car ferrari = new Car(1990, "Ferrari 360 Spider", 310); Car lambo = new Car(2012, "Lamborghini Gallardo", 290); Car bugatti = new Car(2010, "Bugatti Veyron", 350); cars.add(ferrari); cars.add(bugatti); cars.add(lambo); } }

3? Phương pháp so sánh được thực hiện trong public class Car { private int manufactureYear; private String model; private int maxSpeed; public Car(int manufactureYear, String model, int maxSpeed) { this.manufactureYear = manufactureYear; this.model = model; this.maxSpeed = maxSpeed; } // ...getters, setters, toString() } import java.util.ArrayList; import java.util.List; public class Main { public static void main(String[] args) { List<Car> cars = new ArrayList<>(); Car ferrari = new Car(1990, "Ferrari 360 Spider", 310); Car lambo = new Car(2012, "Lamborghini Gallardo", 290); Car bugatti = new Car(2010, "Bugatti Veyron", 350); cars.add(ferrari); cars.add(bugatti); cars.add(lambo); } }

3được gọi là thứ tự tự nhiên. Điều này là do trong public class Car { private int manufactureYear; private String model; private int maxSpeed; public Car(int manufactureYear, String model, int maxSpeed) { this.manufactureYear = manufactureYear; this.model = model; this.maxSpeed = maxSpeed; } // ...getters, setters, toString() } import java.util.ArrayList; import java.util.List; public class Main { public static void main(String[] args) { List<Car> cars = new ArrayList<>(); Car ferrari = new Car(1990, "Ferrari 360 Spider", 310); Car lambo = new Car(2012, "Lamborghini Gallardo", 290); Car bugatti = new Car(2010, "Bugatti Veyron", 350); cars.add(ferrari); cars.add(bugatti); cars.add(lambo); } }

5phương thức bạn định nghĩa cách phổ biến nhất hoặc tự nhiên nhất để so sánh các đối tượng của lớp này. Java đã có thứ tự tự nhiên. Ví dụ, Java biết rằng các chuỗi thường được sắp xếp theo thứ tự bảng chữ cái và các số theo giá trị số tăng dần. Do đó, nếu bạn gọi [Dasha, Masha, Sasha]

8phương thức trên danh sách các số hoặc chuỗi, chúng sẽ được sắp xếp. Nếu chương trình của chúng ta thường so sánh và sắp xếp ô tô theo năm sản xuất, thì chúng ta nên xác định cách sắp xếp tự nhiên cho Ô tô bằng cách sử dụng giao public class Car { private int manufactureYear; private String model; private int maxSpeed; public Car(int manufactureYear, String model, int maxSpeed) { this.manufactureYear = manufactureYear; this.model = model; this.maxSpeed = maxSpeed; } // ...getters, setters, toString() } import java.util.ArrayList; import java.util.List; public class Main { public static void main(String[] args) { List<Car> cars = new ArrayList<>(); Car ferrari = new Car(1990, "Ferrari 360 Spider", 310); Car lambo = new Car(2012, "Lamborghini Gallardo", 290); Car bugatti = new Car(2010, "Bugatti Veyron", 350); cars.add(ferrari); cars.add(bugatti); cars.add(lambo); } }

6diện và public class Car { private int manufactureYear; private String model; private int maxSpeed; public Car(int manufactureYear, String model, int maxSpeed) { this.manufactureYear = manufactureYear; this.model = model; this.maxSpeed = maxSpeed; } // ...getters, setters, toString() } import java.util.ArrayList; import java.util.List; public class Main { public static void main(String[] args) { List<Car> cars = new ArrayList<>(); Car ferrari = new Car(1990, "Ferrari 360 Spider", 310); Car lambo = new Car(2012, "Lamborghini Gallardo", 290); Car bugatti = new Car(2010, "Bugatti Veyron", 350); cars.add(ferrari); cars.add(bugatti); cars.add(lambo); } }

5phương pháp. Nhưng nếu điều này là không đủ cho chúng ta thì sao? Hãy tưởng tượng rằng chương trình của chúng ta không đơn giản như vậy. Trong hầu hết các trường hợp, việc phân loại ô tô tự nhiên (mà chúng tôi đã thiết lập để thực hiện theo năm sản xuất) phù hợp với chúng tôi. Nhưng đôi khi khách hàng của chúng tôi là những người đam mê lái xe nhanh. Nếu chúng ta đang chuẩn bị một danh mục ô tô để họ nghiên cứu, thì ô tô nên được sắp xếp theo tốc độ tối đa.

Ví dụ: giả sử chúng ta cần sắp xếp như thế này 15% thời gian. Điều này rõ ràng là không đủ để chúng tôi thiết lập [Dasha, Masha, Sasha]

9phân loại tự nhiên của lớp theo tốc độ thay vì theo năm sản xuất. Nhưng chúng tôi không thể bỏ qua 15% khách hàng của mình. Vậy ta phải làm sao? Một giao diện khác hỗ trợ chúng tôi tại đây: @Override public int compareTo(Car o) { return this.getManufactureYear() - o.getManufactureYear(); }

3. Giống như public class Car { private int manufactureYear; private String model; private int maxSpeed; public Car(int manufactureYear, String model, int maxSpeed) { this.manufactureYear = manufactureYear; this.model = model; this.maxSpeed = maxSpeed; } // ...getters, setters, toString() } import java.util.ArrayList; import java.util.List; public class Main { public static void main(String[] args) { List<Car> cars = new ArrayList<>(); Car ferrari = new Car(1990, "Ferrari 360 Spider", 310); Car lambo = new Car(2012, "Lamborghini Gallardo", 290); Car bugatti = new Car(2010, "Bugatti Veyron", 350); cars.add(ferrari); cars.add(bugatti); cars.add(lambo); } }

3, nó là một giao diện được tham số hóa. Có gì khác biệt? public class Car { private int manufactureYear; private String model; private int maxSpeed; public Car(int manufactureYear, String model, int maxSpeed) { this.manufactureYear = manufactureYear; this.model = model; this.maxSpeed = maxSpeed; } // ...getters, setters, toString() } import java.util.ArrayList; import java.util.List; public class Main { public static void main(String[] args) { List<Car> cars = new ArrayList<>(); Car ferrari = new Car(1990, "Ferrari 360 Spider", 310); Car lambo = new Car(2012, "Lamborghini Gallardo", 290); Car bugatti = new Car(2010, "Bugatti Veyron", 350); cars.add(ferrari); cars.add(bugatti); cars.add(lambo); } }

3làm cho các đối tượng của chúng ta "có thể so sánh được" và xác định thứ tự sắp xếp tự nhiên nhất của chúng, tức là thứ tự sắp xếp sẽ được sử dụng trong hầu hết các trường hợp. @Override public int compareTo(Car o) { return this.getManufactureYear() - o.getManufactureYear(); }

3là một giao diện "so sánh" riêng biệt. Nếu chúng ta cần thực hiện một số loại thứ tự sắp xếp đặc biệt, chúng ta không cần phải vào lớp [Dasha, Masha, Sasha]

9và thay đổi logic của public class Car { private int manufactureYear; private String model; private int maxSpeed; public Car(int manufactureYear, String model, int maxSpeed) { this.manufactureYear = manufactureYear; this.model = model; this.maxSpeed = maxSpeed; } // ...getters, setters, toString() } import java.util.ArrayList; import java.util.List; public class Main { public static void main(String[] args) { List<Car> cars = new ArrayList<>(); Car ferrari = new Car(1990, "Ferrari 360 Spider", 310); Car lambo = new Car(2012, "Lamborghini Gallardo", 290); Car bugatti = new Car(2010, "Bugatti Veyron", 350); cars.add(ferrari); cars.add(bugatti); cars.add(lambo); } }

5. Thay vào đó, chúng ta có thể tạo một lớp riêng thực hiện Bộ so sánh và dạy nó cách thực hiện sắp xếp mà chúng ta cần! import java.util.Comparator; public class MaxSpeedCarComparator implements Comparator<Car> { @Override public int compare(Car o1, Car o2) { return o1.getMaxSpeed() - o2.getMaxSpeed(); } }

Như bạn có thể thấy, của chúng tôi @Override public int compareTo(Car o) { return this.getManufactureYear() - o.getManufactureYear(); }

3là khá đơn giản. Chúng ta chỉ cần triển khai một phương thức giao diện: import java.util.ArrayList; import java.util.Collections; import java.util.List; public class Main { public static void main(String[] args) { List<Car> cars = new ArrayList<>(); Car ferrari = new Car(1990, "Ferrari 360 Spider", 310); Car lambo = new Car(2012, "Lamborghini Gallardo", 290); Car bugatti = new Car(2010, "Bugatti Veyron", 350); cars.add(ferrari); cars.add(bugatti); cars.add(lambo); // There was previously an error here Collections.sort(cars); System.out.println(cars); } }

0. Nó lấy hai [Dasha, Masha, Sasha]

9đối tượng làm đầu vào và so sánh tốc độ tối đa của chúng theo cách thông thường (bằng phép trừ). Like public class Car { private int manufactureYear; private String model; private int maxSpeed; public Car(int manufactureYear, String model, int maxSpeed) { this.manufactureYear = manufactureYear; this.model = model; this.maxSpeed = maxSpeed; } // ...getters, setters, toString() } import java.util.ArrayList; import java.util.List; public class Main { public static void main(String[] args) { List<Car> cars = new ArrayList<>(); Car ferrari = new Car(1990, "Ferrari 360 Spider", 310); Car lambo = new Car(2012, "Lamborghini Gallardo", 290); Car bugatti = new Car(2010, "Bugatti Veyron", 350); cars.add(ferrari); cars.add(bugatti); cars.add(lambo); } }

5, nó trả về an import java.util.ArrayList; import java.util.Collections; import java.util.List; public class Main { public static void main(String[] args) { List<Car> cars = new ArrayList<>(); Car ferrari = new Car(1990, "Ferrari 360 Spider", 310); Car lambo = new Car(20012, "Lamborghini Gallardo", 290); Car bugatti = new Car(2010, "Bugatti Veyron", 350); cars.add(ferrari); cars.add(bugatti); cars.add(lambo); // Compilation error! Collections.sort(cars); } }

4và nguyên tắc so sánh là giống nhau. Làm thế nào để chúng tôi sử dụng này? Tất cả đều đơn giản: [Dasha, Masha, Sasha]

0

Đầu ra bảng điều khiển: [Dasha, Masha, Sasha]

1

Chúng ta chỉ cần tạo một đối tượng so sánh và truyền nó cho public class Car { private int manufactureYear; private String model; private int maxSpeed; public Car(int manufactureYear, String model, int maxSpeed) { this.manufactureYear = manufactureYear; this.model = model; this.maxSpeed = maxSpeed; } // ...getters, setters, toString() } import java.util.ArrayList; import java.util.List; public class Main { public static void main(String[] args) { List<Car> cars = new ArrayList<>(); Car ferrari = new Car(1990, "Ferrari 360 Spider", 310); Car lambo = new Car(2012, "Lamborghini Gallardo", 290); Car bugatti = new Car(2010, "Bugatti Veyron", 350); cars.add(ferrari); cars.add(bugatti); cars.add(lambo); } }

2phương thức cùng với danh sách cần sắp xếp. Khi [Dasha, Masha, Sasha]

8phương thức nhận được một bộ so sánh, nó không sử dụng cách sắp xếp tự nhiên được định nghĩa trong phương thức [Dasha, Masha, Sasha]

9của lớp public class Car { private int manufactureYear; private String model; private int maxSpeed; public Car(int manufactureYear, String model, int maxSpeed) { this.manufactureYear = manufactureYear; this.model = model; this.maxSpeed = maxSpeed; } // ...getters, setters, toString() } import java.util.ArrayList; import java.util.List; public class Main { public static void main(String[] args) { List<Car> cars = new ArrayList<>(); Car ferrari = new Car(1990, "Ferrari 360 Spider", 310); Car lambo = new Car(2012, "Lamborghini Gallardo", 290); Car bugatti = new Car(2010, "Bugatti Veyron", 350); cars.add(ferrari); cars.add(bugatti); cars.add(lambo); } }

5. Thay vào đó, nó áp dụng thuật toán sắp xếp được xác định bởi bộ so sánh được truyền cho nó. những lợi thế của việc này là gì? Đầu tiên, khả năng tương thích với mã hiện có. Chúng tôi đã tạo một phương pháp sắp xếp mới, đặc biệt, trong khi vẫn giữ nguyên phương pháp hiện tại sẽ được sử dụng thường xuyên. Chúng tôi đã không chạm vào [Dasha, Masha, Sasha]

9lớp học cả. Đó là một public class Car { private int manufactureYear; private String model; private int maxSpeed; public Car(int manufactureYear, String model, int maxSpeed) { this.manufactureYear = manufactureYear; this.model = model; this.maxSpeed = maxSpeed; } // ...getters, setters, toString() } import java.util.ArrayList; import java.util.List; public class Main { public static void main(String[] args) { List<Car> cars = new ArrayList<>(); Car ferrari = new Car(1990, "Ferrari 360 Spider", 310); Car lambo = new Car(2012, "Lamborghini Gallardo", 290); Car bugatti = new Car(2010, "Bugatti Veyron", 350); cars.add(ferrari); cars.add(bugatti); cars.add(lambo); } }

3, và vì vậy nó vẫn là: [Dasha, Masha, Sasha]

2

Thứ hai, tính linh hoạt. Chúng ta có thể thêm bao nhiêu thuật toán sắp xếp tùy thích. Ví dụ: chúng ta có thể sắp xếp ô tô theo màu sắc, tốc độ, trọng lượng hoặc theo số lần ô tô đã được sử dụng trong phim Batman. Tất cả những gì chúng ta cần làm là tạo một tệp @Override public int compareTo(Car o) { return this.getManufactureYear() - o.getManufactureYear(); }

3. Đó là nó! Hôm nay bạn đã nghiên cứu hai cơ chế rất quan trọng mà bạn sẽ thường sử dụng trong các dự án thực tế tại nơi làm việc. Nhưng, như bạn đã biết, lý thuyết mà không có thực hành là không có gì. Bây giờ là lúc để củng cố kiến ​​​​thức của bạn và hoàn thành một số nhiệm vụ!

Chủ đề