Java教程

Java控制语句

面向对象编程

Java内置类

Java文件处理

Java错误和异常

Java多线程

Java同步

Java网络编程

Java集合

Java接口

Java数据结构

Java集合算法

高级Java

Java杂项

Java APIs和框架

Java类参考

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
java_collections.htm
广告