Java常用工具類—集合排序
一、集合排序概述
1、主要內(nèi)容
- 集合中的基本數(shù)據(jù)類型排序
- 集合中的字符串排序
- Comparator接口
- Comparable接口
回顧:
//數(shù)組的排序
int[] arr= {2,3,4,5,2,1};
Arrays.sort(arr);
2、集合排序方法
- 使用Collections類的sort(List list)方法
- sort(List list)是根據(jù)元素的自然順序?qū)χ付斜戆瓷蜻M行排序。
二、對基本數(shù)據(jù)類型和字符串類型進行排序
1、對基本數(shù)據(jù)類型排序
List中只能存放對象,要想存放基本數(shù)據(jù)類型的話,泛型中只能寫其對應(yīng)的包裝類。
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
public class IntSort {
public static void main(String[] args) {
//對存儲在List中的整形數(shù)據(jù)進行排序
List<Integer> list = new ArrayList<Integer>();
list.add(5);
list.add(9);
list.add(3);
list.add(1);
System.out.println("排序前:");
for (int n: list) {
System.out.print(n + " ");
}
System.out.println();
//對List中的數(shù)據(jù)進行排序
Collections.sort(list);
System.out.println("排序后:");
for (int n: list) {
System.out.print(n + " ");
}
}
}
2、對字符串排序
集合中字符串的排序后其實是按字符順序,ASCII值順序進行排序的
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
public class StringSort {
public static void main(String[] args) {
//對存放在List中的字符串進行排序。
List<String> list = new ArrayList<String>();
list.add("orange");
list.add("blue");
list.add("yellow");
list.add("gray");
System.out.println("排序前: ");
for (String str: list) {
System.out.print(str + " ");
}
System.out.println();
//對List中的數(shù)據(jù)進行排序
Collections.sort(list);
System.out.println("排序后: ");
for (String str: list) {
System.out.print(str + " ");
}
//排序后其實是按字母順序
}
}
三、Comparator接口
1、問題場景:
自定義的類如何排序?
2、解決方法:
使用Comparable或Comparator接口
3、Comparator接口介紹
- 強行對某個對象進行整體排序的比較函數(shù)
- 可以將Comparator傳遞給sort方法(如Collections.sort或 Arrays.sort)
- 包含方法int compare(T o1, T o2) 比較用來排序的兩個參數(shù) –如果o1<o2,返回負整數(shù) –如果o1==o2,返回0 –如果o1>o2,返回正整數(shù)
- 包含方法boolean equals(Object obj)指示某個其他對象是否“等于”此Comparator。此方法可以被Object類中的equals方法覆蓋,不必重寫,也就是說,我們在Comparator接口中只需要重寫compare這個方法。
4、對寵物貓進行排序
對自定義的類按照一定的規(guī)則進行排序:
(1)對寵物貓按名字進行排序
String類型具有compareTo()方法
例:
int n = name1.conpareTo(name2);
如果name1<name2時,那么n是負整數(shù),相等則為0,否則為正整數(shù)。
name1與name2位置調(diào)換下,則會實現(xiàn)倒序的排序。
import java.util.Comparator;
//按名字進行升序排序的比較器
public class NameComparator implements Comparator<Cat> {
@Override
public int compare(Cat o1, Cat o2) {
//按名字升序排序
String name1 = o1.getName();
String name2 = o2.getName();
int n = name1.compareTo(name2);
return n;
}
}
語法格式:
Collections.sort(catList, new NameComparator());
(2)對寵物貓按年齡降序排序
- 調(diào)用compare方法大于0,就把前一個數(shù)和后一個數(shù)交換,也就是把大的數(shù)放后面了,即所謂的升序了。如果第二個參數(shù)與第一個參數(shù)調(diào)換順序,也就是降序了。
- 按int類型比較,直接返回減法后的差值。
import java.util.Comparator;
//按年齡進行降序排序的比較器
public class AgeComparator implements Comparator<Cat> {
@Override
public int compare(Cat o1, Cat o2) {
int age1 = o1.getMonth();
int age2 = o2.getMonth();
return age2 - age1;
}
}
語法格式:
Collections.sort(catList, new AgeComparator());
四、Comparable接口
1、Comparable概述
- Comparable接口位于Java.lang包下面
- 此接口強行對實現(xiàn)他的每個類的對象進行整體排序
- 這種排序被稱為類的自然排序,類的compareTo方法被稱為它的自然比較方法
- 對于集合,通過調(diào)用Collection.sort方法進行排序
- 對于數(shù)組,通過調(diào)用Arrays.sort方法進行排序
- int compareTo(T o)方法:該對象小于,等于或大于指定對象,則分別返回負整數(shù),0,或正整數(shù)
2、對商品價格進行降序排序案例
(1)操作步驟
- 對待排序的類進行接口實現(xiàn)
- 重寫compareTo方法
- 直接調(diào)用Collections.sort()方法。
(2)代碼實現(xiàn)
①商品類的定義
public class Goods implements Comparable<Goods> { //實現(xiàn)Comparable接口,利用泛型限定比較的類型
private String id; //商品編號
private String name; //商品名稱
private double price; //商品價格
//構(gòu)造方法
public Goods() {
}
public Goods(String id, String name, double price) {
this.setId(id);
this.setName(name);
this.setPrice(price);
}
//getter和setter方法
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public double getPrice() {
return price;
}
public void setPrice(double price) {
this.price = price;
}
@Override
public String toString() {
return "商品編號:" + id + ",商品名稱:" + name + ",商品價格:" + price;
}
@Override
public int compareTo(Goods o) { //重寫compareTo方法。
//取出商品價格
double price1 = this.getPrice();
double price2 = o.getPrice();
int n = new Double(price2 - price1).intValue(); //double類型的差值轉(zhuǎn)為int
return n;
}
②排序步驟
Collections.sort(goodsList);
五、集合排序總結(jié)
Comparator和Comparable接口的區(qū)別
1、Comparator:
①位于java.util包
②在要比較的類的外部實現(xiàn)該接口
③調(diào)用sort方法時,要指定Comparator的實現(xiàn)類
使用順序:
- 實現(xiàn)要排序的接口
- 實現(xiàn)comparator接口
- 測試
2、Comparable
①位于java.lang包
②在要比較的類上實現(xiàn)該接口
③調(diào)用sort方法時,只需指定集合名即可
使用順序:
定義要比較的類,并實現(xiàn)comparable接口
測試

以上所述是小編給大家介紹的Java集合排序詳解整合,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復(fù)大家的。在此也非常感謝大家對腳本之家網(wǎng)站的支持!
相關(guān)文章
SpringBoot 利用MultipartFile上傳本地圖片生成圖片鏈接的實現(xiàn)方法
這篇文章主要介紹了SpringBoot 利用MultipartFile上傳本地圖片生成圖片鏈接的實現(xiàn)方法,本文通過實例代碼給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2021-03-03
mybatis plus表的創(chuàng)建時間和修改時間的操作方法
這篇文章主要介紹了mybatis plus表的創(chuàng)建時間和修改時間的實現(xiàn)方法,本文給大家分享兩種方法,每種方法通過實例代碼給大家介紹的非常詳細,需要的朋友可以參考下2021-09-09
Java數(shù)據(jù)結(jié)構(gòu)篇之實現(xiàn)二叉搜索樹的核心方法
二叉搜索樹是一種常用的數(shù)據(jù)結(jié)構(gòu),它是一棵二叉樹,且每個節(jié)點的值都大于其左子樹中任何節(jié)點的值,而小于其右子樹中任何節(jié)點的值,這篇文章主要給大家介紹了關(guān)于Java數(shù)據(jù)結(jié)構(gòu)篇之實現(xiàn)二叉搜索樹的核心方法,需要的朋友可以參考下2023-12-12
Java的Hibernate框架數(shù)據(jù)庫操作中鎖的使用和查詢類型
這篇文章主要介紹了Java的Hibernate框架數(shù)據(jù)庫操作中鎖的使用和查詢類型,Hibernate是Java的SSH三大web開發(fā)框架之一,需要的朋友可以參考下2016-01-01
Java高并發(fā)編程之CAS實現(xiàn)無鎖隊列代碼實例
這篇文章主要介紹了Java高并發(fā)編程之CAS實現(xiàn)無鎖隊列代碼實例,在多線程操作中,我們通常會添加鎖來保證線程的安全,那么這樣勢必會影響程序的性能,那么為了解決這一問題,于是就有了在無鎖操作的情況下依然能夠保證線程的安全,需要的朋友可以參考下2023-12-12
SpringBoot中LogBack日志配置與多環(huán)境實戰(zhàn)
在現(xiàn)代軟件開發(fā)中,日志記錄是不可或缺的一部分,Spring Boot 提供了多種日志框架的支持,其中 Logback 是一個非常流行的選擇,因為它簡單、高效且功能強大,本文將介紹如何在 Spring Boot 項目中配置 Logback,并實現(xiàn)不同環(huán)境下的日志配置,需要的朋友可以參考下2025-01-01

