Java - 集合算法


Java - 集合算法

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

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

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

Sr.No. 方法和描述
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)

返回由comp确定的c中的最小元素无需对集合进行排序。

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)

用列表中的new替换所有旧的old。如果至少发生一次替换,则返回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作为随机数源来随机化(即,随机化)列表中的元素

19

static void shuffle(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确定的列表元素排序。

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(列表列表)

返回列表支持的不可修改列表。

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[]) {

      // Create and initialize linked list
      LinkedList ll = new LinkedList();
      ll.add(new Integer(-8));
      ll.add(new Integer(20));
      ll.add(new Integer(-20));
      ll.add(new Integer(8));

      // Create a reverse order comparator
      Comparator r = Collections.reverseOrder();

      // Sort list by using the comparator
      Collections.sort(ll, r);

      // Get iterator
      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);

      // 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 in reverse: 20 8 -8 -20
List shuffled: 20 -20 8 -8
Minimum: -20
Maximum: 20