• 定制排序小案例


     案例:自定义 Book 类,里面包含 name 和 price,按 price 排序(从大到小)。

    要求使用两种方式排序 , 有一个 Book[] books = 4 本书对象.

    使用前面学习过的传递 实现 Comparator 接口匿名内部类,也称为定制排序。

    可以按照 price (1)从大到小 (2)从小到大 (3) 按照书名长度从大到小

    1. public class ArraysExercise {
    2. public static void main(String[] args) {
    3. Book[] books = new Book[4];
    4. books[0] = new Book("红楼梦", 100);
    5. books[1] = new Book("金瓶梅新版", 90);
    6. books[2] = new Book("青年文摘", 5);
    7. books[3] = new Book("百战Java合集", 300);
    8. // Arrays.sort(books, new Comparator() {
    9. // @Override
    10. // public int compare(Book o1, Book o2) {
    11. // Book book1 = (Book) o1;
    12. // Book book2 = (Book) o2;
    13. // double priceValue = book1.getPrice()-book2.getPrice();
    14. // //如果发现返回的姐过和我们输出的不一样,那么就修改一下返回的 1 和 -1
    15. // if(priceValue>0){
    16. // return 1;
    17. // }else if(priceValue<0){
    18. // return -1;
    19. // }else {
    20. // return 0;
    21. // }
    22. // }
    23. // });
    24. //这里是对Book数组排序,因此 o1 和 o2 就是Book对象
    25. Arrays.sort(books, new Comparator() {
    26. @Override
    27. public int compare(Book o1, Book o2) {
    28. Book book1 = (Book)o1;
    29. Book book2 = (Book)o2;
    30. return book1.getName().length()-book2.getName().length();
    31. // double nameValue = book1.getName().length()-book2.getName().length();
    32. // if(nameValue>0){
    33. // return 1;
    34. // }else if(nameValue<0) {
    35. // return -1;
    36. // }else{
    37. // return 0;
    38. // }
    39. }
    40. });
    41. System.out.println(Arrays.toString(books));
    42. }
    43. }
    44. class Book {
    45. private String name = "";
    46. public String getName() {
    47. return name;
    48. }
    49. public void setName(String name) {
    50. this.name = name;
    51. }
    52. public double getPrice() {
    53. return price;
    54. }
    55. public void setPrice(double price) {
    56. this.price = price;
    57. }
    58. @Override
    59. public String toString() {
    60. return "Book{" +
    61. "name='" + name + '\'' +
    62. ", price=" + price +
    63. '}';
    64. }
    65. private double price = 0;
    66. public Book(String name, double price) {
    67. this.name = name;
    68. this.price = price;
    69. }
    70. }

    以下是自己写的冒泡排序:(与该题设无关)

    1. public static void Bubble(int arr[], Comparator c) {
    2. int temp = 0;
    3. for (int i = 0; i < arr.length - 1; i++) {
    4. for (int j = 0; j < arr.length - i - 1; j++) {
    5. if (c.compare(arr[j], arr[j + 1]) > 0) {
    6. temp = arr[j];
    7. arr[j] = arr[j + 1];
    8. arr[j + 1] = temp;
    9. }
    10. }
    11. }
    12. }

  • 相关阅读:
    LeetCode-891. 子序列宽度之和【排序,数学,数组】
    为什么Redis默认序列化器处理之后的key会带有乱码?
    C语言题收录(六)
    线性dp,毫哥和巨佬的故事
    Dart 3.2 更新盘点
    公开游戏、基于有向图的游戏
    Android学习笔记 6. Notification
    Go : const rotates恒定旋转(附完整源码)
    IDEA代码重构技巧--抽取类和接口
    IP地址定位基础数据采集
  • 原文地址:https://blog.csdn.net/qq_58341172/article/details/133838897