科技行者

行者学院 转型私董会 科技行者专题报道 网红大战科技行者

知识库

知识库 安全导航

至顶网软件频道java.util 第1部分:类集框架 (17)

java.util 第1部分:类集框架 (17)

  • 扫一扫
    分享文章到微信

  • 扫一扫
    关注官方公众号
    至顶头条

java.util 第1部分:类集框架 (17)

作者:Herbert Schildt 著 张玉清 吴溥峰等 译 来源:清华大学出版社 2007年10月30日

关键字: 类集框架 java.util

  • 评论
  • 分享微博
  • 分享邮件

15.8 类 集 算 法
类集框架定义了几种能用于类集和映射的算法。在Collections类中,这些算法被定义为静态方法。表15-9中列出了这些算法。当试图比较不兼容的类型时,其中的一些算法引发一个ClassCastException 异常; 而当试图改变一个不可改变的类集时, 则引发一个UnsupportedOperationException异常。
表15-9 由Collections 定义的算法
方法 描述
static int binarySearch(List list, Object
value,Comparator c)
按照c的次序在list中搜寻value。如果value在list内,则
返回value在list的位置。如果在list中没有发现value,
则返回-1
static int binarySearch(List list, Object value) 在list中搜寻value,列表(list)必须被排序。如果value
在list内,则返回value的位置。如果在list中没有发现value,则返回-1
static void copy(List list1, List list2) 将list2中的元素复制给list1
续表
方法 描述
static Enumeration enumeration(Collection c) 返回c的一个枚举(参看本章后面的“枚举接口”)。
static void fill(List list, Object obj) 将obj赋给list中的每一个元素
Static Object max(Collection c,Comparator comp) 返回由comp确定的c中的最大元素
static Object max(Collection c) 返回按自然顺序确定的c中的最大元素。类集不必被排序
static Object min(Collection c,Comparator comp) 返回由comp确定的c中的最小元素。类集不必被排序
static Object min(Collection c) 返回按自然顺序确定的c中的最小元素
static List nCopies(int num, Object obj) 返回包含在不可改变的列表中的obj的num个拷贝。num必须大于等于0
static void reverse(List list) 将list中的序列逆向
static Comparator reverseOrder( ) 返回一个逆向比较函数(即将两个元素比较的结果进行逆向的比较函数)
static void shuffle(List list, Random r) 用r作为随机数的源,对list中的元素进行混淆(也即随机化)
static void shuffle(List list) 对list中的元素进行混淆(也即随机化)
static Set singleton(Object obj) 返回一个不可改变的集合obj。这是一个实现将单个对象变成集合的简单办法
static List singletonList(Object obj) 返回一个不可改变的列表obj。这是一个实现将单个对象变成列表的简单办法(在Java 2的1.3版中新增加的)
static Map singletonMap(Object k, Object v) 返回一个不可改变的关键字/值对映射k/v。这是一个实现将单个关键字/值对变成映射的简单办法(在Java2的1.3版中新增加的)
static void sort(List list, Comparator comp) 按comp对list中的元素进行排序
static void sort(List list) 按自然顺序对list中的元素进行排序
static Collection
synchronizedCollection(Collection c)
返回一个被c支持的安全线程类集
static List synchronizedList(List list) 返回一个被list支持的安全线程列表
static Map synchronizedMap(Map m) 返回一个被m支持的安全线程映射
static Set synchronizedSet(Set s) 返回一个被s支持的安全线程集合
static SortedMap
synchronizedSortedMap(SortedMap sm)
返回一个被sm支持的安全线程排序集合
static SortedSet
synchronizedSortedSet(SortedSet ss)
返回一个被ss支持的安全线程集合
static Collection
unmodifiableCollection(Collection c)
返回一个被c支持的不可变类集
Static List unmodifiableList(List list) 返回一个被list支持的不可变列表
续表
方法 描述
static Map unmodifiableMap(Map m) 返回一个被m支持的不可变映射
static Set unmodifiableSet(Set s) 返回一个被s支持的不可变集合
Static SortedMap
unmodifiable SortedMap(SortedMap sm)
返回一个被sm支持的不可变排序映射
static SortedSet
unmodifiableSortedSet(SortedSet ss)
返回一个被ss支持的不可变排序集合
注意其中的几种方法,如synchronizedList( )和synchronizedSet( )被用来获得各种类集的同步(安全线程)拷贝。正如前面解释的那样,没有任何一个标准类集实现是同步的。必须使用同步算法来为其提供同步。另一种观点:同步类集的迭代函数必须在synchronized块内使用。以unmodifiable开头的一组方法返回不能被改变的各种类集“视图”。这些方法当将一些进程对类集设为只读形式时很有用的。Collections定义了三个静态变量:EMPTY_SET,EMPTY_LIST和EMPTY_MAP。它们都是不可改变的。EMPTY_MAP是在Java 2的1.3版中新增加的。下面的程序说明了其中的一些算法。该程序创建和初始化了一个链表。reverseOrder( )方法返回一个对Integer对象的比较进行逆向的Comparator函数。列表中的元素按照这个比较函数进行排序并被显示出来。接下来,调用shuffle( )方法对列表进行随机排列。然后显示列表的最大和最小值。
// Demonstrate various algorithms.
import java.util.*;
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
注意min( )和max( )方法是在列表被混淆之后,对其进行操作的。两者在运行时,都不需要排序的列表。
查看本文来源
    • 评论
    • 分享微博
    • 分享邮件
    邮件订阅

    如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。

    重磅专题
    往期文章
    最新文章