Java教程
- Java - 首頁
- Java - 概述
- Java - 歷史
- Java - 特性
- Java與C++比較
- JVM - Java虛擬機器
- Java - JDK、JRE和JVM的區別
- Java - Hello World程式
- Java - 環境配置
- Java - 基本語法
- Java - 變數型別
- Java - 資料型別
- Java - 型別轉換
- Java - Unicode系統
- Java - 基本運算子
- Java - 註釋
- Java - 使用者輸入
- Java - 日期和時間
Java控制語句
- Java - 迴圈控制
- Java - 決策制定
- Java - if-else語句
- Java - switch語句
- Java - for迴圈
- Java - for-each迴圈
- Java - while迴圈
- Java - do-while迴圈
- Java - break語句
- Java - continue語句
面向物件程式設計
- Java - 面向物件程式設計概念
- Java - 物件和類
- Java - 類屬性
- Java - 類方法
- Java - 方法
- Java - 變數作用域
- Java - 建構函式
- Java - 訪問修飾符
- Java - 繼承
- Java - 聚合
- Java - 多型
- Java - 方法重寫
- Java - 方法過載
- Java - 動態繫結
- Java - 靜態繫結
- Java - 例項初始化塊
- Java - 抽象
- Java - 封裝
- Java - 介面
- Java - 包
- Java - 內部類
- Java - 靜態類
- Java - 匿名類
- Java - 單例類
- Java - 包裝類
- Java - 列舉
- Java - 列舉建構函式
- Java - 列舉字串
Java內建類
Java檔案處理
Java錯誤和異常
- Java - 異常
- Java - try-catch塊
- Java - try-with-resources語句
- Java - 多重catch塊
- Java - 巢狀try塊
- Java - finally塊
- Java - throw異常
- Java - 異常傳播
- Java - 內建異常
- Java - 自定義異常
Java多執行緒
- Java - 多執行緒
- Java - 執行緒生命週期
- Java - 建立執行緒
- Java - 啟動執行緒
- Java - 執行緒連線
- Java - 執行緒命名
- Java - 執行緒排程器
- Java - 執行緒池
- Java - 主執行緒
- Java - 執行緒優先順序
- Java - 守護執行緒
- Java - 執行緒組
- Java - 關閉鉤子
Java同步
Java網路程式設計
- Java - 網路程式設計
- Java - Socket程式設計
- Java - URL處理
- Java - URL類
- Java - URLConnection類
- Java - HttpURLConnection類
- Java - Socket類
- Java - 泛型
Java集合
Java介面
Java資料結構
Java集合演算法
高階Java
- Java - 命令列引數
- Java - Lambda表示式
- Java - 傳送郵件
- Java - Applet基礎
- Java - Javadoc註釋
- Java - 自動裝箱和拆箱
- Java - 檔案不匹配方法
- Java - REPL (JShell)
- Java - 多版本Jar檔案
- Java - 私有介面方法
- Java - 內部類菱形運算子
- Java - 多解析度影像API
- Java - 集合工廠方法
- Java - 模組系統
- Java - Nashorn JavaScript
- Java - Optional類
- Java - 方法引用
- Java - 函式式介面
- Java - 預設方法
- Java - Base64編碼解碼
- Java - switch表示式
- Java - Teeing收集器
- Java - 微基準測試
- Java - 文字塊
- Java - 動態CDS存檔
- Java - Z垃圾收集器(ZGC)
- Java - 空指標異常
- Java - 打包工具
- Java - 密封類
- Java - 記錄類
- Java - 隱藏類
- Java - 模式匹配
- Java - 簡潔的數字格式化
- Java - 垃圾回收
- Java - JIT編譯器
Java雜項
- Java - 遞迴
- Java - 正則表示式
- Java - 序列化
- Java - 字串
- Java - Process API改進
- Java - Stream API改進
- Java - 增強的@Deprecated註解
- Java - CompletableFuture API改進
- Java - 流
- Java - 日期時間API
- Java 8 - 新特性
- Java 9 - 新特性
- Java 10 - 新特性
- Java 11 - 新特性
- Java 12 - 新特性
- Java 13 - 新特性
- Java 14 - 新特性
- Java 15 - 新特性
- Java 16 - 新特性
Java APIs和框架
Java類參考
- Java - Scanner類
- Java - 陣列
- Java - 字串
- Java - Date類
- Java - ArrayList類
- Java - Vector類
- Java - Stack類
- Java - PriorityQueue類
- Java - LinkedList類
- Java - ArrayDeque類
- Java - HashMap類
- Java - LinkedHashMap類
- Java - WeakHashMap類
- Java - EnumMap類
- Java - TreeMap類
- Java - IdentityHashMap類
- Java - HashSet類
- Java - EnumSet類
- Java - LinkedHashSet類
- Java - TreeSet類
- Java - BitSet類
- Java - Dictionary類
- Java - Hashtable類
- Java - Properties類
- Java - Collection類
- Java - Array類
Java實用資源
Java集合演算法
集合框架定義了可以應用於集合和對映的幾種演算法。
這些演算法在Collections類中定義為靜態方法。一些方法可能丟擲ClassCastException異常(當嘗試比較不相容的型別時發生)或UnsupportedOperationException異常(當嘗試修改不可修改的集合時發生)。
集合框架演算法中定義的方法總結如下表所示:
| 序號 | 方法及描述 |
|---|---|
| 1 | static int binarySearch(List list, Object value, Comparator c) 根據c對列表進行排序,然後在列表中搜索value。返回value在列表中的位置,如果未找到則返回-1。 |
| 2 | static int binarySearch(List list, Object value) 在列表中搜索value。列表必須已排序。返回value在列表中的位置,如果未找到則返回-1。 |
| 3 | static void copy(List list1, List list2) 將list2的元素複製到list1。 |
| 4 | static Enumeration enumeration(Collection c) 返回c的列舉。 |
| 5 | static void fill(List list, Object obj) 將obj賦值給列表的每個元素。 |
| 6 | static int indexOfSubList(List list, List subList) 在list中搜索subList的第一次出現。返回第一次匹配的索引,如果未找到匹配項則返回-1。 |
| 7 | static int lastIndexOfSubList(List list, List subList) 在list中搜索subList的最後一次出現。返回最後一次匹配的索引,如果未找到匹配項則返回-1。 |
| 8 | static ArrayList list(Enumeration enum) 返回包含enum元素的ArrayList。 |
| 9 | static Object max(Collection c, Comparator comp) 返回c中由comp確定的最大元素。 |
| 10 | static Object max(Collection c) 返回c中由自然排序確定的最大元素。集合不需要排序。 |
| 11 | static Object min(Collection c, Comparator comp) 返回c中由comp確定的最小元素。集合不需要排序。 |
| 12 | static Object min(Collection c) 返回c中由自然排序確定的最小元素。 |
| 13 | static List nCopies(int num, Object obj) 返回包含num個obj副本的不可變列表。num必須大於或等於零。 |
| 14 | static boolean replaceAll(List list, Object old, Object new) 將列表中所有出現的old替換為new。如果至少發生一次替換則返回true,否則返回false。 |
| 15 | static void reverse(List list) 反轉list中的序列。 |
| 16 | static Comparator reverseOrder( ) 返回一個反向比較器。 |
| 17 | static void rotate(List list, int n) 將list向右旋轉n個位置。要向左旋轉,請對n使用負值。 |
| 18 | static void shuffle(List list, Random r) 使用r作為隨機數源,對列表中的元素進行洗牌(即隨機化)。 |
| 19 | static void shuffle(List list) 對list中的元素進行洗牌(即隨機化)。 |
| 20 | static Set singleton(Object obj) 將obj作為不可變集合返回。這是將單個物件轉換為集合的簡單方法。 |
| 21 | static List singletonList(Object obj) 將obj作為不可變列表返回。這是將單個物件轉換為列表的簡單方法。 |
| 22 | static Map singletonMap(Object k, Object v) 將鍵/值對k/v作為不可變對映返回。這是將單個鍵/值對轉換為對映的簡單方法。 |
| 23 | static void sort(List list, Comparator comp) 根據comp對list的元素進行排序。 |
| 24 | static void sort(List list) 根據其自然順序對列表的元素進行排序。 |
| 25 | static void swap(List list, int idx1, int idx2) 交換列表中由idx1和idx2指定的索引處的元素。 |
| 26 | static Collection synchronizedCollection(Collection c) 返回由c支援的執行緒安全集合。 |
| 27 | static List synchronizedList(List list) 返回由list支援的執行緒安全列表。 |
| 28 | static Map synchronizedMap(Map m) 返回由m支援的執行緒安全對映。 |
| 29 | static Set synchronizedSet(Set s) 返回由s支援的執行緒安全集合。 |
| 30 | static SortedMap synchronizedSortedMap(SortedMap sm) 返回由sm支援的執行緒安全排序對映。 |
| 31 | static SortedSet synchronizedSortedSet(SortedSet ss) 返回由ss支援的執行緒安全排序集合。 |
| 32 | static Collection unmodifiableCollection(Collection c) 返回由c支援的不可修改集合。 |
| 33 | static List unmodifiableList(List list) 返回由list支援的不可修改列表。 |
| 34 | static Map unmodifiableMap(Map m) 返回由m支援的不可修改對映。 |
| 35 | static Set unmodifiableSet(Set s) 返回由s支援的不可修改集合。 |
| 36 | static SortedMap unmodifiableSortedMap(SortedMap sm) 返回一個由sm支援的不可修改的有序對映。 |
| 37 | static SortedSet unmodifiableSortedSet(SortedSet ss) 返回一個由ss支援的不可修改的有序集合。 |
示例 1
以下是一個示例,演示了使用 LinkedList 新增元素並將其元素按逆序排序的各種演算法。使用迭代器迭代列表,然後將其洗牌,最後檢索並列印最小值和最大值。
import java.util.Collections;
import java.util.Comparator;
import java.util.Iterator;
import java.util.LinkedList;
import java.util.List;
public class AlgorithmsDemo {
public static void main(String args[]) {
// Create and initialize linked list
List<Integer< ll = new LinkedList<<();
ll.add(Integer.valueOf(-8));
ll.add(Integer.valueOf(20));
ll.add(Integer.valueOf(-20));
ll.add(Integer.valueOf(8));
// Create a reverse order comparator
Comparator<Integer< r = Collections.reverseOrder();
// Sort list by using the comparator
Collections.sort(ll, r);
// Get iterator
Iterator<Integer< li = ll.iterator();
System.out.print("List sorted in reverse: ");
while(li.hasNext()) {
System.out.print(li.next() + " ");
}
System.out.println();
}
}
輸出
List sorted in reverse: 20 8 -8 -20
示例 2
以下是一個示例,演示了使用 LinkedList 新增元素並將其元素按自然順序排序的各種演算法。使用迭代器迭代列表,然後將其洗牌,最後檢索並列印最小值和最大值。
import java.util.Collections;
import java.util.Comparator;
import java.util.Iterator;
import java.util.LinkedList;
import java.util.List;
public class AlgorithmsDemo {
public static void main(String args[]) {
// Create and initialize linked list
List<Integer> ll = new LinkedList<>();
ll.add(Integer.valueOf(-8));
ll.add(Integer.valueOf(20));
ll.add(Integer.valueOf(-20));
ll.add(Integer.valueOf(8));
// Sort list by using the default comparator
Collections.sort(ll);
// Get iterator
Iterator<Integer> li = ll.iterator();
System.out.print("List sorted: ");
while(li.hasNext()) {
System.out.print(li.next() + " ");
}
System.out.println();
Collections.shuffle(ll);
// display randomized list
li = ll.iterator();
System.out.print("List shuffled: ");
while(li.hasNext()) {
System.out.print(li.next() + " ");
}
System.out.println();
System.out.println("Minimum: " + Collections.min(ll));
System.out.println("Maximum: " + Collections.max(ll));
}
}
輸出
List sorted: -20 -8 8 20 List shuffled: -20 -8 20 8 Minimum: -20 Maximum: 20
示例 3
以下是一個示例,演示了使用 LinkedList 新增字串元素並將其元素按自然順序排序的各種演算法。列印列表,然後將其洗牌,最後檢索並列印最小值和最大值。
import java.util.Collections;
import java.util.Comparator;
import java.util.Iterator;
import java.util.LinkedList;
import java.util.List;
public class AlgorithmsDemo {
public static void main(String args[]) {
// Create and initialize linked list
List<String> list = new LinkedList<>();
list.add("Ram");
list.add("Mohan");
list.add("Julie");
list.add("Raheem");
// Sort list by using the default comparator
Collections.sort(list);
// print the sorted list
System.out.println("Sorted List: " + list);
// shuffle the list
Collections.shuffle(list);
// print the shuffled list
System.out.println("Shuffled List: " + list);
System.out.println("Minimum: " + Collections.min(list));
System.out.println("Maximum: " + Collections.max(list));
}
}
輸出
Sorted List: [Julie, Mohan, Raheem, Ram] Shuffled List: [Mohan, Raheem, Julie, Ram] Minimum: Julie Maximum: Ram