一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務(wù)器之家:專注于服務(wù)器技術(shù)及軟件下載分享
分類導(dǎo)航

PHP教程|ASP.NET教程|JAVA教程|ASP教程|編程技術(shù)|正則表達式|C/C++|IOS|C#|Swift|Android|JavaScript|易語言|

服務(wù)器之家 - 編程語言 - JAVA教程 - Java針對ArrayList自定義排序的2種實現(xiàn)方法

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

2021-03-22 13:58_TCgogogo_ JAVA教程

這篇文章主要介紹了Java針對ArrayList自定義排序的2種實現(xiàn)方法,結(jié)合實例形式總結(jié)分析了Java操作ArrayList自定義排序的原理與相關(guān)實現(xiàn)技巧,需要的朋友可以參考下

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

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

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

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
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;
      }
    }
  }
}

測試類:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
import java.util.*;
public class Test {
  public static void printData(List<Student> list) {
    for (Student student : list) {
      System.out.println("學(xué)號:" + 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é)果:

?
1
2
3
4
5
6
7
8
9
10
11
12
before sorted
學(xué)號:1 姓名:A 年齡20 身高:180
學(xué)號:2 姓名:B 年齡21 身高:175
學(xué)號:3 姓名:C 年齡22 身高:190
學(xué)號:4 姓名:D 年齡21 身高:170
學(xué)號:5 姓名:E 年齡20 身高:185
after age and height sorted
學(xué)號:1 姓名:A 年齡20 身高:180
學(xué)號:5 姓名:E 年齡20 身高:185
學(xué)號:4 姓名:D 年齡21 身高:170
學(xué)號:2 姓名:B 年齡21 身高:175
學(xué)號:3 姓名:C 年齡22 身高:190

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

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
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;
  }
}

測試類:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
import java.util.*;
public class Test {
  public static void printData(List<Student> list) {
    for (Student student : list) {
      System.out.println("學(xué)號:" + 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é)果:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
before sorted
學(xué)號:1 姓名:A 年齡20 身高:180
學(xué)號:2 姓名:B 年齡21 身高:175
學(xué)號:3 姓名:C 年齡22 身高:190
學(xué)號:4 姓名:D 年齡21 身高:170
學(xué)號:5 姓名:E 年齡20 身高:185
after age sorted
學(xué)號:1 姓名:A 年齡20 身高:180
學(xué)號:5 姓名:E 年齡20 身高:185
學(xué)號:2 姓名:B 年齡21 身高:175
學(xué)號:4 姓名:D 年齡21 身高:170
學(xué)號:3 姓名:C 年齡22 身高:190
after age and height sorted
學(xué)號:1 姓名:A 年齡20 身高:180
學(xué)號:5 姓名:E 年齡20 身高:185
學(xué)號:4 姓名:D 年齡21 身高:170
學(xué)號:2 姓名:B 年齡21 身高:175
學(xué)號:3 姓名:C 年齡22 身高:190

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

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

原文鏈接:http://blog.csdn.net/tc_to_top/article/details/52525771

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 国产免费好大好硬视频 | 啾咪成人漫画免费 | 网址在线观看你懂我意思吧免费的 | 国士李风起全文在线阅读 | 欧美精品色精品一区二区三区 | 国产在线观看91精品一区 | 亚洲国产高清视频 | 欧美z0z0人禽交 | 极品丝袜乱系列在线阅读 | 日本加勒比在线精品视频 | 逼123| 99久久香蕉 | 亚洲日本中文字幕天堂网 | 色一情一乱一伦 | 99任你躁精品视频 | 精品国产精品国产 | 亚洲欧美一区二区三区在饯 | 无人区在线观看免费观看 | 草逼视频免费看 | 99这里都是精品 | 全黄h全肉细节修仙玄幻文 全彩调教侵犯h本子全彩妖气he | 我在厨房摸岳的乳HD在线观看 | 精品国产区一区二区三区在线观看 | 亚洲伦理天堂 | 欧美性受xxxx88喷潮 | 青青青青久久国产片免费精品 | 嫩交18xxxx| 无人区乱码1区2区3区网站 | 亚洲视频999 | 性导航h| 丰腴尤物贵妇浪荡小说 | 性吧有你 | 日本 在线观看 | 私人黄色| 日韩精选| 国产成人一区二区三区 | 久久这里只精品热在线18 | 精品久久久久久国产 | 日本黄色高清视频网站 | porono日本人xxx | 午夜私人福利影院 |