Java中的排列解释[带有编码示例]
已发表: 2020-11-24JAVA 由 Sun Microsystems 的 James Gosling 于 1995 年开发。使用 JAVA,开发人员可以创建能够在几乎任何平台上运行的稳定、安全和弹性的应用程序,包括基于 Linux、Windows 和 macOS 的操作系统。
JAVA(也称为 WORA)的Write Once,Run Always属性也省去了重新编译已经编译过一次的代码的需要。 JAVA 的这种多功能性使其成为将内置的复杂逻辑和数学功能集成到几乎所有类型的跨平台应用程序中的理想语言。
与任何其他替代(或流行)Web 开发环境相比,使用 JAVA 开发 Web 应用程序的优势延伸到持续应用程序优势的三个主要支柱,即:
- JAVA 语法易于学习和适应,适合各种速度和复杂程度的编码人员。 这使得 JAVA 成为人事频繁变动的开发团队的安全选择。 新资源与通用开发平台 (JAVA) 保持一致所需的时间是业内最少的之一。
- JAVA 是一种高级的、面向对象的编程语言,这使得它在方法上完全模块化,并使开发人员能够创建功能上可重用的代码块,从而减少工作量。 庞大的内置函数库还减少了对其他三级插件或编译器插件、脚本等的依赖——这反过来又使 JAVA 成为最少的实现时间之一。
- 如上所述,JAVA 独立于平台,融合了世界上最好的东西。 用 JAVA 开发的 Web 应用程序可以轻松地从一个操作系统迁移到另一个操作系统,并且功能零损失,这是在任何开发环境中拥有的无价实用程序。
作为使 JAVA 作为 Web 开发平台如此有利可图的方面之一,它的最小实现依赖性和数学上合理的语法可以被慷慨地利用来执行几乎任何数学或逻辑指令,只需调用一个内置函数,只需最少的额外定制。
代码中这种灵活性最突出的例子之一是在 JAVA 中执行排列的能力——更具体地说,是真正随机化并找到特定字符串中所有可用字符的所有可能排列。
在本指导教程中,我们将学习如何尝试在 JAVA 中执行此排列,方法是将字符串的第一个字符存储在字符串的“跟踪”位置,并调用 generatePermutation() 函数以随机化所有其他的不同变化字符串中的字符。

阅读: Java 面试问答
目录
Java中的排列——回溯算法的概念
为了解决JAVA 中的这个排列问题,我们必须首先熟悉一个在 Web 开发社区中被广泛接受的概念,即回溯算法是一个递归过程,它依赖于周期性地固定给定字符串的一个字符并将其与所有其他字符的所有可能排列组合,并在字符串的每个位置分别重复此过程,以达到最大值(以及所有可能的)该字符串的变体数量。
JAVA 中的这种置换算法在给定三个字符的字符串的上下文中更容易理解。 假设给定字符串中的这三个字符是 A、B 和 C。
在 JAVA中执行这种排列的第一步是先固定一个字符(我们总是从固定第一个位置的可用字符开始),然后将所有剩余的字符与原始字符(固定)字符。
例如,在 ABC 字符串示例中,我们将通过固定字符A (这是 ABC 字符串中的然后我们得出以下组合: ABC 、 BAC和CBA 。
下一步是类似地“修复”在字符串的下一个位置找到的字符(在这种情况下,在字符串的第二个位置找到的字符,即B )并交换剩余的字符(包括被最终,我们将在实现每个随机化级别的情况下继续重复此步骤,直到我们得到所有可能排列的完整集合:
美国广播公司
ACB
BAC
BCA
CBA
出租车
在本文末尾提供的示例代码/所需输出部分中,我们将把在 JAVA 中执行排列的尝试转换为清晰的代码,从而实时计算排列。
在 JAVA 中执行置换——回溯和交换的递归算法
在 JAVA 中获取随机字符串并执行彻底置换的过程的简要总结,可以用以下逐步递归算法来描述:

- 字符串定义——首先,定义一个字符串。 您始终可以选择接受随机字符串作为输入变量,但为了明确目的和努力,我们将在此示例中使用预定义的字符串 ABC。
- 字符修复- 修复一个字符(从第一个位置的字符开始,并继续将其与所有剩余字符交换)。
- generatePermutation() – 为所有剩余字符调用并使用 generatePermutation() 函数的输出。
- 递归回溯——执行“回溯”算法,并不断递归地交换字符,直到您的代码到达字符串的末尾(在我们当前的示例中,直到 C)。
在 JAVA 中执行排列 - 示例代码:
公共类 PermuteString {
//定义一个函数来交换位置i处的字符与位置j处的所有字符
公共静态字符串交换字符串(字符串 a,int i,int j){
// 字符串中固定字符的字符定义
char[] b =a.toCharArray();
字符 ch;
// 在下一步中执行交换
ch = b[i];
b[i] = b[j];
b[j] = 通道;
返回 String.valueOf(b);
}公共静态无效主要(字符串 [] 参数)
{
//定义默认字符串ABC
字符串 str = “ABC”;
//计算字符串长度
int len = str.length();
//打印所有随机化
System.out.println(“以下是字符串ABC的所有可能排列:”);
generatePermutation(str, 0, len);
}
//定义一个函数来生成字符串的所有可能排列
public static void generatePermutation(String str, int start, int end)
{
// 打印所有排列
如果(开始 == 结束-1)
System.out.println(str);
别的
{
for (int i = start; i < end; i++)
{
//固定一个字符来交换字符串
str = swapString(str,start,i);
//为所有剩余字符递归调用 generatePermutation() 函数 generatePermutation(str,start+1,end);
//执行回溯算法以重新交换字符
str = swapString(str,start,i);
}
}
}
}
在 JAVA 中执行置换 - 来自示例代码的输出:
当您编译并运行此示例时,所需的输出应如下所示:
以下是字符串 ABC 的所有可能排列:
美国广播公司
ACB
BAC
BCA

CBA
出租车
必读:有趣的 Java 项目和主题
结论
我们希望您发现本教程对在 JAVA 中执行排列很有用。
如果您有兴趣了解有关 Java、OOP 和全栈软件开发的更多信息,请查看 upGrad 和 IIIT-B 的全栈软件开发 PG 文凭,该文凭专为在职专业人士设计,提供 500 多个小时的严格培训,9 + 项目和任务、IIIT-B 校友身份、实用的实践顶点项目和顶级公司的工作协助。