Java集合实现

这里描述的多态算法是Java平台提供的可重用功能。所有这些都来自 Collections类,并且都采用静态方法的形式,其第一个参数是要在其上执行操作的集合。Java平台提供的绝大多数算法都在List实例上运行,但其中一些算法 在任意 Collection实例上运行。本节简要介绍以下算法:

  • 排序
  • 洗牌
  • 常规数据操作
  • 搜索
  • 组成
  • 最值
  • sort算法重新排序a List,使得其元素根据排序关系按升序排列。提供了两种形式的操作。简单形式List根据其元素的自然顺序对其进行排序和排序。如果您不熟悉自然排序的概念,请阅读 对象排序部分。

    sort操作使用一种快速稳定的略微优化的合并排序算法:

  • 快速:保证及时运行n log(n)并在几乎排序的列表上运行得更快。经验测试显示它与高度优化的快速排序一样快。快速排序通常被认为比合并排序更快但不稳定并且不保证n log(n)性能。
  • 稳定:它不会重新排序相同的元素。如果您对不同的属性重复排序相同的列表,这一点很重要。如果邮件程序的用户通过邮寄日期对收件箱进行排序,然后由发件人对其进行排序,则用户自然希望来自给定发件人的现在连续的邮件列表(仍)按邮件日期排序。仅当第二种排序稳定时才能保证这一点。
  • 第二种形式除了sortComparator之外还用a List对元素进行排序Comparator。假设您想要以相反的大小顺序打印出我们之前示例中的anagram组 - 首先是最大的anagram组。下面的示例向您展示了如何借助方法的第二种形式实现此目的sort

    回想一下,anagram组MapList实例的形式存储为a 中的值。通过修改后的打印代码迭代Map的值查看,把每List即通过最小尺寸测试成ListList第 然后代码List使用Comparator期望List实例对此进行排序,并实现反向大小排序。最后,代码遍历排序List,打印其元素(anagram组)。以下代码替换示例中main方法末尾的打印代码Anagrams

洗牌

shuffle算法的作用与此相反sort,破坏了可能存在于a中的任何顺序List。也就是说,该算法List基于来自随机源的输入重新排序,使得假设公平的随机源,所有可能的排列以相等的可能性发生。该算法在实现机会游戏时很有用。例如,它可以用于混洗代表甲板ListCard对象。此外,它对生成测试用例很有用。

此操作有两种形式:一种采用a List并使用默认的随机源,另一种需要调用者提供 Random对象以用作随机源。该算法的代码用作本List节中的示例 。

规数据操作

Collections类提供了做日常的数据处理5个对比算法List对象,所有这些都是非常简单:

  • reverse- 颠倒a中元素的顺序List
  • fillList用指定的值覆盖a中的每个元素。此操作对于重新初始化a非常有用List
  • copy- 接受两个参数,一个目标List和一个源List,并将源的元素复制到目标中,覆盖其内容。目的地List必须至少与来源一样长。如果它更长,则目标List中的其余元素不受影响。
  • swap- 将元素交换到a中的指定位置List
  • addAll- 将所有指定的元素添加到a Collection。要添加的元素可以单独指定,也可以指定为数组。

binarySearch算法搜索已排序的指定元素List。该算法有两种形式。第一个采用a List和元素来搜索(“搜索关键字”)。此表单假定List根据其元素的自然顺序按升序排序。第二种形式Comparator除了List搜索键和搜索键外,还假设List按照指定的顺序按升序排序Comparator。该sort算法可用于List在调用之前对其进行排序binarySearch

组成

频率和不相交算法测试一个或多个组成的某些方面Collections

  • frequency - 计算指定元素在指定集合中出现的次数
  • disjoint- 确定两个Collections是否脱节; 也就是说,它们是否不包含任何共同的元素
  • 寻找极值价值观

minmax算法返回,分别包含在指定的最小和最大元素Collection。这两种操作都有两种形式。简单形式只接受a Collection并根据元素的自然顺序返回最小(或最大)元素。第二种形式Comparator除了Collection和之外还根据指定的方式返回最小(或最大)元素Comparator

扫描二维码关注公众号,回复: 3330120 查看本文章

猜你喜欢

转载自blog.csdn.net/xiamaocheng/article/details/82256905
今日推荐