Java基础笔记-集合-Java模拟Arrays.sort实现自定义排序-《Java笔记》

admin 2025-10-19 01:32:21 编程 来源:ZONE.CI 全球网 0 阅读模式

    Java Arrays给一连串数字要排序,可能觉得小case,如果这里有一个图书类别,图书类的成员变量有:书名、价格、作者等等,要求根据图书价格升序排序打印所有图书信息,会怎么做呢?咱们可以在图书类里面定义一个compare 方法

    1. int compare(Book book){undefined
    2. return price-book.price
    3. }

    如果返回值大于零 说明调用者的 price 要更大 ,小于零说明方法体里的参数要更大。咱们再建一个MyArrays类,定义一个排序方法给咱们的book排序。思路有了,下面咱们开始写代码吧,为了达到扩展效果,以便于别人都可以使用,咱们先建一个MyCompareble接口。

    1. public interface MyComparable {
    2. //>0调用者大 <0参数大 ==0一样大
    3. public int compare(Object a);
    4. }

    因为希望所有类都可以实现这个接口并使用其方法,这里参数类型是用了Object,Object是所有类的父类,object对象可以指向任意对象。这里让Book类实现这个接口:

    1. public class Book implements MyComparable{
    2. private String bookName;
    3. private int price;
    4. public Book() {
    5. super();
    6. }
    7. public Book(String bookName, int price) {
    8. super();
    9. this.bookName = bookName;
    10. this.price = price;
    11. }
    12. public String getBookName() {
    13. return bookName;
    14. }
    15. public void setBookName(String bookName) {
    16. this.bookName = bookName;
    17. }
    18. public int getPrice() {
    19. return price;
    20. }
    21. public void setPrice(int price) {
    22. this.price = price;
    23. }
    24. @Override
    25. public String toString() {
    26. return "Book [bookName=" + bookName + ", price=" + price + "]";
    27. }
    28. @Override
    29. public int compare(Object a) {
    30. Book b=(Book)a;
    31. return this.price-b.price;
    32. }
    33. }

    已经实现了MyCompareble接口并重写了 compare方法,再建个MyArrays类,并写好排序方法:

    1. public class MyArrays {
    2. //排序,Object是所有类的父类,object对象可以指向任意对象
    3. public static void sort(Object[] objs){
    4. for(int j=0;j<objs.length-1;j++){
    5. for(int i=objs.length-1;i>j;i--){
    6. MyComparable a=(MyComparable)objs[i];
    7. MyComparable b=(MyComparable)objs[i-1];
    8. if(a.compare(b)<0){
    9. //都能用这段代码
    10. Object temp=objs[i];
    11. objs[i]=objs[i-1];
    12. objs[i-1]=temp;
    13. }
    14. }
    15. }
    16. }
    17. }

    功能已经完善了,来测试下:

    1. public class Demo {
    2. public static void main(String[] args) {
    3. Book[] books=new Book[]{
    4. new Book("C",23),
    5. new Book("Java",109),
    6. new Book("Other",10)
    7. };
    8. MyArrays.sort(books);
    9. display(books);
    10. }
    11. public static void display(Object[] objs){
    12. for(int i=0;i<objs.length;i++){
    13. System.out.println(objs[i]+"");
    14. }
    15. }
    16. }
    以太坊cppgolang区别 编程

    以太坊cppgolang区别

    以太坊是一种去中心化的开源平台,它采用智能合约技术,旨在构建和运行不受干扰的分布式应用程序。作为目前最受欢迎的区块链平台之一,以太坊提供了多种编程语言的支持,其
    progolang 编程

    progolang

    Go语言(Golang)是由Google开发的一门静态类型编程语言。作为一名专业的Golang开发者,我深知这门语言的优势和特点。在本文中,我将介绍Golang
    golangn个发送者 编程

    golangn个发送者

    Golang是一种开源的编程语言,由Google团队开发,旨在提高程序的并发性和简化软件开发过程。在Go语言中,有时需要向多个接收者发送信息。本文将介绍如何在G
    golang技能图谱 编程

    golang技能图谱

    从互联网行业的快速发展到人工智能技术的日益成熟,各种编程语言也应运而生。而在这众多的编程语言中,Golang(即Go)作为一门强大且高效的开发语言备受关注。Go
    评论:0   参与:  11