在本教程中,我們將借助示例學(xué)習(xí)Java集合框架提供的不同算法。
Java集合框架提供了各種算法,可用于處理存儲(chǔ)在數(shù)據(jù)結(jié)構(gòu)中的元素。
Java中的算法是靜態(tài)方法,可用于對(duì)集合執(zhí)行各種操作。
由于算法可用于各種集合,因此也稱為通用算法。
讓我們看看集合框架中可用的不同方法的實(shí)現(xiàn)。
sort()集合框架提供的方法用于對(duì)元素進(jìn)行排序。例如,
import java.util.ArrayList; import java.util.Collections; class Main { public static void main(String[] args) { //創(chuàng)建數(shù)組列表 ArrayList<Integer> numbers = new ArrayList<>(); //添加元素 numbers.add(4); numbers.add(2); numbers.add(3); System.out.println("未排序的ArrayList: " + numbers); // 使用sort()方法 Collections.sort(numbers); System.out.println("已排序的ArrayList: " + numbers); } }
輸出結(jié)果
未排序的ArrayList: [4, 2, 3] 已排序的ArrayList: [2, 3, 4]
在此,排序以自然順序(升序)進(jìn)行。 但是,我們可以使用Comparator接口自定義sort()方法的排序順序。
要了解更多信息,請(qǐng)?jiān)L問(wèn)Java Sorting。
Java Collections框架的shuffle()方法用于打亂數(shù)據(jù)結(jié)構(gòu)中出現(xiàn)的任何順序。它的作用與排序正好相反。例如
import java.util.ArrayList; import java.util.Collections; class Main { public static void main(String[] args) { //創(chuàng)建數(shù)組列表 ArrayList<Integer> numbers = new ArrayList<>(); //添加元素 numbers.add(1); numbers.add(2); numbers.add(3); System.out.println("Sorted ArrayList: " + numbers); //使用shuffle()方法 Collections.shuffle(numbers); System.out.println("使用shuffle的ArrayList: " + numbers); } }
輸出結(jié)果
Sorted ArrayList: [1, 2, 3] 使用shuffle的ArrayList: [2, 1, 3]
當(dāng)我們運(yùn)行程序時(shí),shuffle()方法將返回隨機(jī)輸出。
洗牌算法主要用于需要隨機(jī)輸出的游戲中。
在Java中,集合框架提供了可用于處理數(shù)據(jù)的不同方法。
reverse() - 反轉(zhuǎn)元素的順序
fill() - 用指定的值替換集合中的每個(gè)元素
copy() - 創(chuàng)建從指定源到目標(biāo)的元素副本
swap() - 交換集合中兩個(gè)元素的位置
addAll() - 將集合的所有元素添加到其他集合
例如,
import java.util.Collections; import java.util.ArrayList; class Main { public static void main(String[] args) { //創(chuàng)建一個(gè)ArrayList ArrayList<Integer> numbers = new ArrayList<>(); numbers.add(1); numbers.add(2); System.out.println("ArrayList1: " + numbers); // 使用 reverse() Collections.reverse(numbers); System.out.println("反轉(zhuǎn) ArrayList1: " + numbers); // 使用 swap() Collections.swap(numbers, 0, 1); System.out.println("ArrayList1 使用 swap(): " + numbers); ArrayList<Integer> newNumbers = new ArrayList<>(); // 使用 addAll newNumbers.addAll(numbers); System.out.println("ArrayList2 使用 addAll(): " + newNumbers); // 使用 fill() Collections.fill(numbers, 0); System.out.println("ArrayList1 使用 fill(): " + numbers); // 使用 copy() Collections.copy(newNumbers, numbers); System.out.println("ArrayList2 使用 copy(): " + newNumbers); } }
輸出結(jié)果
ArrayList1: [1, 2] 反轉(zhuǎn) ArrayList1: [2, 1] ArrayList1 使用 swap(): [1, 2] ArrayList2 使用 addALl(): [1, 2] ArrayList1 使用 fill(): [0, 0] ArrayList2 使用 copy(): [0, 0]
注意:執(zhí)行copy()方法時(shí),兩個(gè)列表的大小應(yīng)相同。
Java集合框架的binarySearch()方法搜索指定的元素。它返回元素在指定集合中的位置。例如,
import java.util.Collections; import java.util.ArrayList; class Main { public static void main(String[] args) { //創(chuàng)建一個(gè)ArrayList ArrayList<Integer> numbers = new ArrayList<>(); numbers.add(1); numbers.add(2); numbers.add(3); // 使用 binarySearch() int pos = Collections.binarySearch(numbers, 3); System.out.println("3的位置是 " + pos); } }
輸出結(jié)果
3的位置是 2
注意:在執(zhí)行binarySearch()方法之前,應(yīng)對(duì)集合進(jìn)行排序。
要了解更多信息,請(qǐng)?jiān)L問(wèn)Java Binary Search。
frequency() - 返回元素在集合中存在的次數(shù)計(jì)數(shù)
disjoint() - 檢查兩個(gè)集合是否包含一些公共元素
例如,
import java.util.Collections; import java.util.ArrayList; class Main { public static void main(String[] args) { //創(chuàng)建一個(gè)ArrayList ArrayList<Integer> numbers = new ArrayList<>(); numbers.add(1); numbers.add(2); numbers.add(3); numbers.add(2); System.out.println("ArrayList1: " + numbers); int count = Collections.frequency(numbers, 2); System.out.println("Count of 2: " + count); ArrayList<Integer> newNumbers = new ArrayList<>(); newNumbers.add(5); newNumbers.add(6); System.out.println("ArrayList2: " + newNumbers); boolean value = Collections.disjoint(numbers, newNumbers); System.out.println("兩個(gè)列表是不相交的? " + value); } }
輸出結(jié)果
ArrayList1: [1, 2, 3, 2] Count of 2: 2 ArrayList2: [5, 6] 兩個(gè)列表是不相交? true
Java集合框架的min()和max()方法分別用于查找最小和最大元素。例如,
import java.util.Collections; import java.util.ArrayList; class Main { public static void main(String[] args) { //創(chuàng)建一個(gè)ArrayList ArrayList<Integer> numbers = new ArrayList<>(); numbers.add(1); numbers.add(2); numbers.add(3); // 使用 min() int min = Collections.min(numbers); System.out.println("最小元素: " + min); // 使用 max() int max = Collections.max(numbers); System.out.println("最大元素: " + max); } }
輸出結(jié)果
最小元素: 1 最大元素: 3