Java: Sắp xếp Collections

Các khóa học qua video:
Python SQL Server PHP C# Lập trình C Java HTML5-CSS3-JavaScript
Học trên YouTube <76K/tháng. Đăng ký Hội viên
Viết nhanh hơn - Học tốt hơn
Giải phóng thời gian, khai phóng năng lực

API Collection cung cấp hai interface sau để sắp xếp interface:

Comparable: Interface có thể so sánh áp đặt thứ tự tổng thể trên các đối tượng của mỗi lớp thực hiện nó. Danh sách các đối tượng thực hiện interface này được sắp xếp tự động. Nó được sắp xếp bằng phương thức Collection.sort hoặc Arrays.sort.

Lưu ý - Sắp xếp được gọi là sắp xếp tự nhiên của lớp.  Phương thức compareTo() cho lớp được gọi là phương thức so sánh tự nhiên.

Các đối tượng như vậy có thể được sử dụng làm khóa trong một map đã được sắp xếp hoặc như các phần tử trong comparator.

Hãy xem xét những điều sau đây để biết thứ tự tự nhiên cho lớp C:

  • If e1.compareTo(e2) == 0 có cùng giá trị boolean với e1.equals(e2) cho mọi e1 và e2 của lớp C, thứ tự tự nhiên phù hợp với bằng.
  • null không phải là một thể hiện của bất kỳ lớp nào.
  • e.compareTo(null) ném một NullPointerException ngay cả khi e.uals(null) trả về false.

Khi các sortedset và map không có bộ so sánh rõ ràng được sử dụng với các phần tử hoặc khóa có thứ tự tự nhiên không nhất quán với equals, điều này dẫn đến hành vi bất thường. Do đó, khuyến nghị rằng các thử thách tự nhiên phải phù hợp với equals.

Comparator: Interface này cung cấp nhiều tùy chọn sắp xếp và áp đặt tổng thứ tự cho một số tập hợp các đối tượng. Việc sử dụng bộ so sánh cung cấp những điều sau:

  • Khi sử dụng với một phương thức sắp xếp cung cấp quyền kiểm soát thứ tự sắp xếp.
  • Kiểm soát thứ tự của các cấu trúc dữ liệu nhất định như bản đồ được sắp xếp.
  • Thứ tự cho các collection các đối tượng không có trật tự tự nhiên.

Điều quan trọng cần lưu ý là:

Nếu c.compare(e1, e2) == 0 có cùng giá trị boolean với e1.equals(e2) với mọi e1 và e2 trong S, thì việc sắp xếp của một bộ so sánh c trên một tập các phần tử S phù hợp với equals.

Nếu thứ tự của c trên S không nhất quán với equals, thì sortedset hoặc map sẽ hoạt động không bình thường. Ví dụ: khi hai phần tử a và b được thêm vào sao cho (a.equals(b) && c.compare(a,b) != 0) đến một TreeSet trống với bộ so sánh c. Thao tác thêm thứ hai sau đó sẽ trả về true. Điều này là do a và b không tương đương với TreeSet.

Lưu ý - Để tuần tự hóa một cấu trúc dữ liệu (TreeSet, TreeMap), trình so sánh có thể triển khai java. io.

» Tiếp: Các cải tiến trong các lớp Collections
« Trước: Arrays
Các khóa học qua video:
Python SQL Server PHP C# Lập trình C Java HTML5-CSS3-JavaScript
Học trên YouTube <76K/tháng. Đăng ký Hội viên
Viết nhanh hơn - Học tốt hơn
Giải phóng thời gian, khai phóng năng lực
Copied !!!