Java 中的顺序搜索2024年9月10日 | 阅读 6 分钟 顺序查找,也称为线性查找,是一种用于在列表或数组中查找特定目标元素的简单查找算法。查找过程涉及逐个检查列表中的每个元素,直到找到所需的元素或到达列表末尾。以下是 Java 中顺序查找的实现。 SequentialSearch.java 输出 Element found at index: 3 提供的代码对数组 arr 执行顺序查找,以找到目标元素 targetElement,在本例中为 15。输出将指示是否找到该元素及其所在的索引。 在数组 arr 中,目标元素 15 出现在索引 3 处。因此,输出说明该元素在索引 3 处找到。 在此示例中,我们有一个名为 SequentialSearch 的类,其中包含 sequentialSearch 方法。该方法接受一个数组 arr 和一个目标元素 target。然后,它使用 for 循环遍历数组,并检查每个元素是否与目标元素匹配。如果找到匹配项,则返回目标元素的索引。 如果在检查所有元素后未找到匹配项,则方法返回 -1,表示数组中不存在目标元素。我们使用这些输入调用 sequentialSearch() 方法,并将结果存储在 result 变量中。如果结果不为 -1,我们则打印找到该元素的索引。 处理重复项和多次出现我们之前提供的顺序查找基本实现将找到目标元素在数组中的第一次出现。如果目标元素有多次出现,它将只返回第一次出现的索引。我们可以修改该方法以返回索引列表。 SequentialSearch.java 输出 Element found at indices: [3, 6] 提供的代码搜索数组 arr 中目标元素 targetElement(即 15)的所有出现。然后,它打印找到的所有出现项的索引。 目标元素 15 出现在数组 arr 的两个索引处 - 索引 3 和索引 6。因此,输出显示该元素在索引 3 和 6 处找到。 性能和何时使用顺序查找顺序查找简单易于实现。它适用于小型数组或未排序的数组。但是,对于大型数组或需要频繁搜索的情况,它可能不是最佳选择,因为其线性时间复杂度可能导致性能缓慢。 时间复杂度分析如前所述,顺序查找的最坏情况时间复杂度为 O(n),其中 n 是数组中的元素数量。这意味着搜索时间随数组大小呈线性增长。如果数组已排序,则存在其他查找算法,如二分查找,其时间复杂度为 O(log n),速度更快。 处理边缘情况和提高效率虽然基本的顺序查找适用于小型未排序数组,但对于大型数据集,考虑一些边缘情况并进行效率改进至关重要。 1. 处理空数组 在原始实现中,如果数组为空,即使没有要搜索的元素,搜索方法仍会遍历循环。要处理此边缘情况,我们可以在方法开头添加一个简单的检查。 SequentialSearch.java 输出 Element found at index: 3 2. 提前终止 如果在数组早期找到目标元素,我们可以立即终止搜索,而不是继续遍历其余元素。这可以通过修改循环条件来实现。 SequentialSearch.java 输出 Element found at index: 3 3. 使用增强 for 循环 在 Java 中,我们还可以使用增强 for 循环(for-each 循环)来简化搜索实现。此循环遍历数组的所有元素,而无需显式索引。 SequentialSearch.java 输出 Element found at index: 3 4. 已排序数组优化如果数组已排序,我们可以利用此事实并优化搜索。而不是使用时间复杂度为 O(n) 的顺序查找,我们可以使用二分查找,对于已排序数组,其时间复杂度为 O(log n)。 BinarySearchOptimized.java 输出 Element found at index: 2 总之,顺序查找是一种基本算法,可作为理解查找技术的基础。通过探索各种优化和权衡,我们可以深入了解算法效率的重要性以及为不同场景选择最合适算法的必要性。 选择适合的查找算法至关重要,具体取决于数据的特性和应用程序的特定要求。顺序查找适用于小型未排序数组或需要少量搜索的情况。 但是,对于大型数组或已排序数组,应使用二分查找等更高级的查找算法来实现更好的性能。 下一个主题Java 中的线程组 |
每个局部变量和最终空白字段在访问任何值时都会具有赋给它的值。值访问将包括变量的名称或表达式中出现的区域,除了赋值运算符 "=" 的左侧操作数。要...
阅读 15 分钟
给定一个整数 N,目标是确定从 1 到 N(含)的所有可能数字对中可以生成的不同 XOR 值计数。示例 1 输入:N = 3 输出:4 说明:使用 1... 中的元素的所有可能对如下...
阅读 3 分钟
? LinkedHashMap 类似于 Java 编程中的 HashMap,但它具有额外的功能。它维护着元素添加顺序的记录。标准的 HashMap 中的元素没有固定的顺序。为了记住插入的键的顺序,LinkedHashMap 采用...
5 分钟阅读
在 Java 中,验证给定的压入和弹出组件序列是否可以通过堆栈的后进先出 (LIFO) 行为生成的过程称为堆栈序列验证。为了复制堆栈操作并确定弹出序列是否有效,需要两个整数数组...
阅读 6 分钟
哈希表是计算机科学中的一种基本数据结构,可提供高效的键值对存储和检索。它们在搜索、插入和删除操作方面实现了平均恒定的时间复杂度,这使其对于各种应用(如数据库索引、缓存和关联数组)极具价值。
阅读 6 分钟
当谈到使用 Java 和 Selenium 进行 Web 自动化测试时,有一些基本工具和函数是每位自动化工程师都必须理解的。其中就包括 findElement() 和 findElements()。这些方法对于定位页面上的 Web 元素至关重要,但它们有不同的用途和...
5 分钟阅读
在本文中,我们将找出它们是什么,以及在 Java 编程语言中使用它们的时间和地点。是什么?在编程上下文中,也称为 Java 虚拟机 (JVM) 协程。JVM 协程是用户模式线程...
阅读 3 分钟
java.nio.DoubleBuffer 包含 hasArray() 函数。DoubleBuffer 类用于验证提供的缓冲区是否由可访问的浮点数组支持。如果可以访问该缓冲区的后备数组,它将返回 true;否则,它将返回 false。array() 和 arrayOffset()...
阅读 3 分钟
通过 Java 集合,开发人员获得了强大的工具集,可以帮助他们在 Java 编程环境中有效地维护和操作对象组。Java 集合分别充当非泛型集合和泛型集合。Java 5 中泛型的添加为集合带来了重大进步,改进了...
5 分钟阅读
Java 不提供直接获取数组输入的方法。但是,我们可以使用 Scanner 类的函数来获取数组输入。要输入一个数组,我们必须询问用户数组的长度。之后,我们...
阅读 4 分钟
我们请求您订阅我们的新闻通讯以获取最新更新。
我们提供所有技术(如 Java 教程、Android、Java 框架)的教程和面试问题
G-13, 2nd Floor, Sec-3, Noida, UP, 201301, India