欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Java針對(duì)ArrayList自定義排序的2種實(shí)現(xiàn)方法

 更新時(shí)間:2018年01月15日 13:52:43   作者:_TCgogogo_  
這篇文章主要介紹了Java針對(duì)ArrayList自定義排序的2種實(shí)現(xiàn)方法,結(jié)合實(shí)例形式總結(jié)分析了Java操作ArrayList自定義排序的原理與相關(guān)實(shí)現(xiàn)技巧,需要的朋友可以參考下

本文實(shí)例講述了Java針對(duì)ArrayList自定義排序的2種實(shí)現(xiàn)方法。分享給大家供大家參考,具體如下:

Java中實(shí)現(xiàn)對(duì)list的自定義排序主要通過兩種方式

1)讓需要進(jìn)行排序的對(duì)象的類實(shí)現(xiàn)Comparable接口,重寫compareTo(T o)方法,在其中定義排序規(guī)則,那么就可以直接調(diào)用Collections.sort()來排序?qū)ο髷?shù)組

public class Student implements Comparable{
  private int id;
  private int age;
  private int height;
  private String name;
  public Student(int id, String name, int age, int height) {
    this.id = id;
    this.name = name;
    this.age = age;
    this.height = height;
  }
  public int getId() {
    return id;
  }
  public int getAge() {
    return age;
  }
  public int getHeight() {
    return height;
  }
  public String getName() {
    return name;
  }
  public void setId(int id) {
    this.id = id;
  }
  public void setAge(int age) {
    this.age = age;
  }
  public void setName(String name) {
    this.name = name;
  }
  public void setHeight(int height) {
    this.height = height;
  }
  @Override
  public int compareTo(Object o) {
    Student s = (Student) o;
    if (this.age > s.age) {
      return 1;
    }
    else if (this.age < s.age) {
      return -1;
    }
    else {
      if (this.height >= s.height) {
        return 1;
      }
      else {
        return -1;
      }
    }
  }
}

測(cè)試類:

import java.util.*;
public class Test {
  public static void printData(List<Student> list) {
    for (Student student : list) {
      System.out.println("學(xué)號(hào):" + student.getId() + " 姓名:" + student.getName() + " 年齡" + student.getAge() + " 身高:" + student.getHeight());
    }
  }
  public static void main(String[] args) {
    List<Student> list = new ArrayList<>();
    list.add(new Student(1, "A", 20, 180));
    list.add(new Student(2, "B", 21, 175));
    list.add(new Student(3, "C", 22, 190));
    list.add(new Student(4, "D", 21, 170));
    list.add(new Student(5, "E", 20, 185));
    System.out.println("before sorted");
    printData(list);
    Collections.sort(list);
    System.out.println("after age and height sorted");
    printData(list);
  }
}

結(jié)果:

before sorted
學(xué)號(hào):1 姓名:A 年齡20 身高:180
學(xué)號(hào):2 姓名:B 年齡21 身高:175
學(xué)號(hào):3 姓名:C 年齡22 身高:190
學(xué)號(hào):4 姓名:D 年齡21 身高:170
學(xué)號(hào):5 姓名:E 年齡20 身高:185
after age and height sorted
學(xué)號(hào):1 姓名:A 年齡20 身高:180
學(xué)號(hào):5 姓名:E 年齡20 身高:185
學(xué)號(hào):4 姓名:D 年齡21 身高:170
學(xué)號(hào):2 姓名:B 年齡21 身高:175
學(xué)號(hào):3 姓名:C 年齡22 身高:190

2)實(shí)現(xiàn)比較器接口Comparator,重寫compare方法,直接當(dāng)做參數(shù)傳進(jìn)sort中

public class Student {
  private int id;
  private int age;
  private int height;
  private String name;
  public Student(int id, String name, int age, int height) {
    this.id = id;
    this.name = name;
    this.age = age;
    this.height = height;
  }
  public int getId() {
    return id;
  }
  public int getAge() {
    return age;
  }
  public int getHeight() {
    return height;
  }
  public String getName() {
    return name;
  }
  public void setId(int id) {
    this.id = id;
  }
  public void setAge(int age) {
    this.age = age;
  }
  public void setName(String name) {
    this.name = name;
  }
  public void setHeight(int height) {
    this.height = height;
  }
}

測(cè)試類:

import java.util.*;
public class Test {
  public static void printData(List<Student> list) {
    for (Student student : list) {
      System.out.println("學(xué)號(hào):" + student.getId() + " 姓名:" + student.getName() + " 年齡" + student.getAge() + " 身高:" + student.getHeight());
    }
  }
  public static void main(String[] args) {
    List<Student> list = new ArrayList<>();
    list.add(new Student(1, "A", 20, 180));
    list.add(new Student(2, "B", 21, 175));
    list.add(new Student(3, "C", 22, 190));
    list.add(new Student(4, "D", 21, 170));
    list.add(new Student(5, "E", 20, 185));
    System.out.println("before sorted");
    printData(list);
    Collections.sort(list, new Comparator<Student>() {
      @Override
      public int compare(Student o1, Student o2) {
        if(o1.getAge() >= o2.getAge()) {
          return 1;
        }
        else {
          return -1;
        }
      }
    });
    System.out.println("after age sorted");
    printData(list);
    Collections.sort(list, new Comparator<Student>() {
      @Override
      public int compare(Student o1, Student o2) {
        if(o1.getAge() > o2.getAge()) {
          return 1;
        }
        else if (o1.getAge() < o2.getAge()){
          return -1;
        }
        else {
          if (o1.getHeight() >= o2.getHeight()) {
            return 1;
          }
          else {
            return -1;
          }
        }
      }
    });
    System.out.println("after age and height sorted");
    printData(list);
  }
}

輸出結(jié)果:

before sorted
學(xué)號(hào):1 姓名:A 年齡20 身高:180
學(xué)號(hào):2 姓名:B 年齡21 身高:175
學(xué)號(hào):3 姓名:C 年齡22 身高:190
學(xué)號(hào):4 姓名:D 年齡21 身高:170
學(xué)號(hào):5 姓名:E 年齡20 身高:185
after age sorted
學(xué)號(hào):1 姓名:A 年齡20 身高:180
學(xué)號(hào):5 姓名:E 年齡20 身高:185
學(xué)號(hào):2 姓名:B 年齡21 身高:175
學(xué)號(hào):4 姓名:D 年齡21 身高:170
學(xué)號(hào):3 姓名:C 年齡22 身高:190
after age and height sorted
學(xué)號(hào):1 姓名:A 年齡20 身高:180
學(xué)號(hào):5 姓名:E 年齡20 身高:185
學(xué)號(hào):4 姓名:D 年齡21 身高:170
學(xué)號(hào):2 姓名:B 年齡21 身高:175
學(xué)號(hào):3 姓名:C 年齡22 身高:190

單從上面的例子可以看出排序是穩(wěn)定的,去看了下java的Collections.sort的源代碼,確實(shí)是基于穩(wěn)定的歸并排序?qū)崿F(xiàn)的,內(nèi)部還做了優(yōu)化,叫TimSort。(關(guān)于TimSort還可參考https://baike.baidu.com/item/TimSort?fr=aladdin

PS:這里再為大家推薦一款關(guān)于排序的演示工具供大家參考:

在線動(dòng)畫演示插入/選擇/冒泡/歸并/希爾/快速排序算法過程工具:
http://tools.jb51.net/aideddesign/paixu_ys

更多關(guān)于java算法相關(guān)內(nèi)容感興趣的讀者可查看本站專題:《Java數(shù)據(jù)結(jié)構(gòu)與算法教程》、《Java操作DOM節(jié)點(diǎn)技巧總結(jié)》、《Java文件與目錄操作技巧匯總》和《Java緩存操作技巧匯總

希望本文所述對(duì)大家java程序設(shè)計(jì)有所幫助。

相關(guān)文章

  • 開源項(xiàng)目ERM模型轉(zhuǎn)jpa實(shí)體maven插件使用

    開源項(xiàng)目ERM模型轉(zhuǎn)jpa實(shí)體maven插件使用

    這篇文章主要為大家介紹了開源項(xiàng)目ERM模型轉(zhuǎn)jpa實(shí)體maven插件的使用說明,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步
    2022-03-03
  • 詳解Java的Struts框架中棧值和OGNL的使用

    詳解Java的Struts框架中棧值和OGNL的使用

    這篇文章主要介紹了Java的Struts框架中棧值和OGNL的使用,Struts框架是Java的SSH三大web開發(fā)框架之一,需要的朋友可以參考下
    2015-11-11
  • mybatis.type-aliases-package的作用及用法說明

    mybatis.type-aliases-package的作用及用法說明

    這篇文章主要介紹了mybatis.type-aliases-package的作用及用法說明,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-01-01
  • Spring BeanFactory和FactoryBean有哪些區(qū)別

    Spring BeanFactory和FactoryBean有哪些區(qū)別

    這篇文章主要介紹了Spring BeanFactory 與 FactoryBean 的區(qū)別詳情,BeanFactory 和 FactoryBean 的區(qū)別卻是一個(gè)很重要的知識(shí)點(diǎn),在本文中將結(jié)合源碼進(jìn)行分析講解,需要的小伙伴可以參考一下
    2023-02-02
  • java實(shí)現(xiàn)發(fā)送郵箱驗(yàn)證碼

    java實(shí)現(xiàn)發(fā)送郵箱驗(yàn)證碼

    這篇文章主要為大家詳細(xì)介紹了java實(shí)現(xiàn)發(fā)送郵箱驗(yàn)證碼,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-08-08
  • Json字符串內(nèi)容比較超實(shí)用教程

    Json字符串內(nèi)容比較超實(shí)用教程

    這篇文章主要介紹了Json字符串內(nèi)容比較-超實(shí)用版,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2023-09-09
  • Spring Junit測(cè)試找不到SpringJUnit4ClassRunner.class的解決

    Spring Junit測(cè)試找不到SpringJUnit4ClassRunner.class的解決

    這篇文章主要介紹了Spring Junit測(cè)試找不到SpringJUnit4ClassRunner.class的解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-04-04
  • Java處理科學(xué)計(jì)數(shù)法數(shù)字方式

    Java處理科學(xué)計(jì)數(shù)法數(shù)字方式

    這篇文章主要介紹了Java處理科學(xué)計(jì)數(shù)法數(shù)字方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-07-07
  • RabbitMQ中的Connection和Channel信道詳解

    RabbitMQ中的Connection和Channel信道詳解

    這篇文章主要介紹了RabbitMQ中的Connection和Channel信道詳解,信道是建立在 Connection 之上的虛擬連接,RabbitMQ 處理的每條 AMQP 指令都是通過信道完成的,需要的朋友可以參考下
    2023-08-08
  • spring-data-redis 動(dòng)態(tài)切換數(shù)據(jù)源的方法

    spring-data-redis 動(dòng)態(tài)切換數(shù)據(jù)源的方法

    最近遇到了一個(gè)麻煩的需求,我們需要一個(gè)微服務(wù)應(yīng)用同時(shí)訪問兩個(gè)不同的 Redis 集群,一般情況下我們會(huì)怎么處理呢,下面通過場(chǎng)景分析給大家介紹spring-data-redis 動(dòng)態(tài)切換數(shù)據(jù)源的方法,感興趣的朋友一起看看吧
    2021-08-08

最新評(píng)論