Java - 集合算法


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

这些算法在 Collections 类中定义为静态方法。其中一些方法可能会抛出ClassCastException(在尝试比较不兼容类型时发生)或 UnsupportedOperationException 在尝试修改不可修改的集合时发生)。

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

先生。 方法及说明
1

static int binarySearch(列表列表、对象值、比较器 c)

在根据c排序的列表中搜索值。返回值在列表中的位置,如果未找到值则返回 -1。

2

static int binarySearch(列表列表,对象值)

在列表中搜索值。该列表必须排序。返回值在列表中的位置,如果未找到值则返回 -1。

3

静态无效复制(列表列表1,列表列表2)

将 list2 的元素复制到 list1。

4

static Enumeration 枚举(Collection c)

返回c 的枚举。

5

静态无效填充(列表列表,对象obj)

将 obj 分配给列表的每个元素。

6

static int indexOfSubList(列表列表,列表子列表)

在列表中搜索第一次出现的 subList。返回第一个匹配项的索引,如果未找到匹配项,则返回 .1。

7

static int lastIndexOfSubList(列表列表,列表子列表)

在列表中搜索最后一次出现的 subList。返回最后一个匹配项的索引,如果未找到匹配项,则返回 .1。

8

静态ArrayList列表(枚举enum)

返回包含 enum 元素的 ArrayList。

9

静态对象 max(集合 c,比较器 comp)

返回由 comp 确定的c中的最大元素。

10

静态对象最大值(集合c)

返回c中由自然排序确定的最大元素。集合不需要排序。

11

静态对象 min(集合 c,比较器 comp)

返回由 comp 确定的c中的最小元素。集合不需要排序。

12

静态对象最小值(集合c)

返回c中由自然排序确定的最小元素。

13

静态列表 nCopies(int num, 对象 obj)

返回不可变列表中包含的 obj 的 num 个副本。num 必须大于或等于零。

14

静态布尔replaceAll(列表列表,旧对象,新对象)

将列表中所有出现的旧项替换为新项。如果至少发生了一次替换,则返回 true。返回 false,否则。

15

静态无效反向(列表列表)

反转列表中的顺序。

16

静态比较器reverseOrder( )

返回一个反向比较器。

17 号

静态无效旋转(列表列表,int n)

将列表向右旋转n位。要向左旋转,请对n使用负值。

18

static void shuffle(列表列表,随机r)

使用r作为随机数源来对列表中的元素进行洗牌(即随机化) 。

19

静态无效洗牌(列表列表)

随机排列(即随机化)列表中的元素。

20

静态设置单例(对象 obj)

将 obj 作为不可变集返回。这是将单个对象转换为集合的简单方法。

21

静态列表 singletonList(Object obj)

将 obj 作为不可变列表返回。这是将单个对象转换为列表的简单方法。

22

静态映射 singletonMap(对象 k, 对象 v)

返回键/值对 k/v 作为不可变映射。这是将单个键/值对转换为映射的简单方法。

23

static void sort(列表列表,比较器比较)

根据 comp 确定对列表元素进行排序。

24

静态无效排序(列表列表)

根据列表元素的自然顺序对列表元素进行排序。

25

静态无效交换(列表列表,int idx1,int idx2)

交换列表中由 idx1 和 idx2 指定的索引处的元素。

26

静态集合synchronizedCollection(集合c)

返回由c支持的线程安全集合。

27

静态列表synchronizedList(列表列表)

返回由 list 支持的线程安全列表。

28

静态映射synchronizedMap(Map m)

返回m支持的线程安全映射。

29

静态集合synchronizedSet(Set s)

返回由s支持的线程安全集。

30

静态 SortedMap 同步SortedMap(SortedMap sm)

返回由sm支持的线程安全排序集。

31

静态 SortedSet 同步SortedSet(SortedSet ss)

返回由ss支持的线程安全集。

32

静态集合不可修改的集合(集合c)

返回由c支持的不可修改的集合。

33

静态列表不可修改列表(列表列表)

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

34

静态Map不可修改Map(Map m)

返回由m支持的不可修改的映射。

35

静态集不可修改集(Set s)

返回由s支持的不可修改的集合。

36

静态 SortedMap 不可修改SortedMap(SortedMap sm)

返回由sm支持的不可修改的排序映射。

37

静态 SortedSet 不可修改的SortedSet(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 添加 String 元素并按自然顺序对其元素进行排序的各种算法。打印列表,然后打乱列表,最后检索并打印最小值和最大值。

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