教程 > Java 教程 > Java 高级 阅读:12

Java 集合算法

返回 Java 集合框架


集合框架定义了几种可应用于集合和Map的算法。

这些算法被定义为 Collections 类中的静态方法。 其中一些方法可能会抛出 ClassCastException,当尝试比较不兼容的类型时会发生这种情况;当尝试修改不可修改的集合时会抛出 UnsupportedOperationException

集合框架算法中定义的方法总结如下表

序号 方法 描述
1 static int binarySearch(List list, Object value, Comparator c) 在按照 c 排序的列表中搜索值。 返回值在列表中的位置,如果未找到值,则返回 -1。
2 static int binarySearch(List list, Object 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) 在列表中搜索第一次出现的 subList。 返回第一个匹配项的索引,如果未找到匹配项,则返回 .1。
7 static int lastIndexOfSubList(List list, List subList) 在列表中搜索最后一次出现的 subList。 返回最后一个匹配项的索引,如果没有找到匹配项,则返回 .1。
8 static ArrayList list(Enumeration enum) 返回一个包含枚举元素的 ArrayList。
9 static Object max(Collection c, Comparator comp) 返回由 comp 确定的 c 中的最大元素。
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) 返回包含在不可变列表中的 obj 的 num 个副本。 num 必须大于或等于零。
14 static boolean replaceAll(List list, Object old, Object new) 将列表中所有出现的 old 替换为 new。 如果至少发生了一次替换,则返回 true。 返回 false,否则返回。
15 static void reverse(List list) 反转列表中的顺序。
16 static Comparator reverseOrder( ) 返回一个反向比较器。
17 static void rotate(List list, int n) 将列表向右旋转 n 个位置。 要向左旋转,请为 n 使用负值。
18 static void shuffle(List list, Random r) 使用 r 作为随机数的来源,对列表中的元素进行 shuffle方法调用(即随机化)。
19 static void shuffle(List list) shuffle(即随机化)列表中的元素。
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 支持的不可修改的排序集。

示例

import java.util.*;
public class AlgorithmsDemo {

   public static void main(String args[]) {
      
      // 创建和初始化链表
      LinkedList ll = new LinkedList();
      ll.add(new Integer(-8));
      ll.add(new Integer(20));
      ll.add(new Integer(-20));
      ll.add(new Integer(8));
      
      // 创建逆序比较器
      Comparator r = Collections.reverseOrder();
      
      // 使用比较器对列表进行排序
      Collections.sort(ll, r);
      
      // 获取迭代器
      Iterator li = ll.iterator();
      System.out.print("List sorted in reverse: ");
      
      while(li.hasNext()) {
         System.out.print(li.next() + " ");
      }
      System.out.println();
      Collections.shuffle(ll);
      
      // 显示随机列表
      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 in reverse: 20 8 -8 -20
List shuffled: 20 -20 8 -8
Minimum: -20
Maximum: 20

返回 Java 集合框架

查看笔记

扫码一下
查看教程更方便