如何在 Java 中检查或检测数组中的重复元素
检测 Java 数组中的重复元素是我喜欢的另一个编程面试问题。 可能有很多方法可以检查数组是否包含重复元素,有时我们会通过在 Java 面试中提出这个问题来发现检查重复项的独特方法。 这个问题的美妙之处在于它有无数的后续问题,所以如果受访者通过了这个问题,你可以问他关于时间复杂度和空间的问题,或者改进他的算法以使其更快。你甚至可以要求找到 Array 中的那些重复元素,甚至可以从 Array 中的一个重复元素变成许多重复元素。 正如我所说,这样可以真正测试 Java 程序员的编程技能。
检查数组中是否有重复元素 Java
在本 Java 教程中,我们将看到几种在 Java 中查找数组是否包含重复项的方法。 我们将使用不允许重复的 Java 集合类 Set 的唯一属性来检查 java 数组中的重复元素。 这里有五种方法可以检查数组是否有重复项:
1. 暴力破解算法
蛮力方法将 Array 的每个元素与所有其他元素进行比较,如果发现重复则返回 true。 尽管这不是一个有效的选择,但它是第一个想到的选择。
2. 使用集合数据结构
检查 Java 数组是否包含重复项的另一种快速方法是将该数组转换为 Set。 由于 Set 不允许重复,如果 Array 包含重复项,则相应 Set 的大小将小于原始 Array,否则 Array 和 Set 的大小将相同。
3.在Java中使用 HashSet
在 java 数组中检测重复的另一种方法是将数组的每个元素添加到 HashSet 中,这是一个 Set 实现。 由于如果 Set 已经包含要添加的元素,则 Set 的 add(Object obj)
方法返回 false,因此可用于查明数组是否包含 Java 中的重复元素。
此外,基本数据结构的基础知识也非常重要。
在下一节中,我们将在 java 中完成对 Array 的所有三种重复检测方式的代码示例。 请记住,此讨论只是确认一个数组是否包含重复项,它并没有从数组中找出实际的重复元素,尽管您可以轻松地扩展示例 Java 程序以根据您的要求完成该任务。
这也是流行的编程面试问题之一,在几个面试中被问到。
Java中检查数组重复项的代码示例
这是上述所有方法的完整代码示例,用于检查数组是否包含重复项。
import java.util.Arrays;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
public class CheckDuplicatesInJavaArray {
public static void main(String args[]) {
String[] withDuplicates = new String[]{"one", "two", "three", "one"};
String[] withoutDuplicates = new String[]{"one", "two", "three"};
System.out.println("Checking array with duplicate using brute force: " + bruteforce(withDuplicates));
System.out.println("Checking array without any duplicate using brute force: " + bruteforce(withoutDuplicates));
System.out.println("Checking array with duplicate using Set and List: " + checkDuplicateUsingSet(withDuplicates));
System.out.println("Checking array without any duplicate using Set and List: " + checkDuplicateUsingSet(withoutDuplicates));
System.out.println("Checking array with duplicate using Set and List: " + checkDuplicateUsingAdd(withDuplicates));
System.out.println("Checking array without any duplicate using Set and List: " + checkDuplicateUsingAdd(withoutDuplicates));
}
/*
* 在 Java 中检查数组是否包含重复项的蛮力方法
* 将每个元素与数组复杂度的所有其他元素进行比较,
* 在生产中不建议按 O(n^2) 的顺序进行
*/
public static boolean bruteforce(String[] input) {
for (int i = 0; i < input.length; i++) {
for (int j = 0; j < input.length; j++) {
if (input[i].equals(input[j]) && i != j) {
return true;
}
}
}
return false;
}
/*
* 通过比较 List 和 Set 的大小来检测数组中的重复项,因为 Set 不包含重复项,对于包含重复项的数组,大小必须更小
*/
public static boolean checkDuplicateUsingSet(String[] input) {
List inputList = Arrays.asList(input);
Set inputSet = new HashSet(inputList);
if (inputSet.size() < inputList.size()) {
return true;
}
return false;
}
/*
* 由于 Set 不允许重复 add() 返回 false
* 如果我们尝试将重复项添加到 Set 并且此属性可用于检查数组是否包含 Java 中的重复项
*/
public static boolean checkDuplicateUsingAdd(String[] input) {
Set tempSet = new HashSet();
for (String str : input) {
if (!tempSet.add(str)) {
return true;
}
}
return false;
}
}
上述代码输出结果如下
这就是关于如何在 Java 中检查数组是否包含重复项的全部内容。 大家会看到我们在两个示例中使用了 Java Collection API,也可以有其他纯编程解决方案。 在真正的面试中,你可能会被要求在不使用 Java API 的情况下检测重复项。 如果遇到其他不使用 Java API 检查数组中重复项的好方法,请告诉我们。
相关文章
如何在 Java 中延迟几秒钟的时间
发布时间:2023/12/17 浏览次数:217 分类:Java
-
本篇文章主要介绍如何在 Java 中制造程序延迟。本教程介绍了如何在 Java 中制造程序延时,并列举了一些示例代码来了解它。
如何在 Java 中把 Hashmap 转换为 JSON 对象
发布时间:2023/12/17 浏览次数:187 分类:Java
-
它描述了允许我们将哈希图转换为简单的 JSON 对象的方法。本文介绍了在 Java 中把 Hashmap 转换为 JSON 对象的方法。我们将看到关于创建一个 hashmap,然后将其转换为 JSON 对象的详细例子。
如何在 Java 中按值排序 Map
发布时间:2023/12/17 浏览次数:171 分类:Java
-
本文介绍了如何在 Java 中按值对 Map 进行排序。本教程介绍了如何在 Java 中按值对 Map
进行排序,并列出了一些示例代码来理解它。
如何在 Java 中打印 HashMap
发布时间:2023/12/17 浏览次数:192 分类:Java
-
本帖介绍了如何在 Java 中打印 HashMap。本教程介绍了如何在 Java 中打印 HashMap 元素,还列举了一些示例代码来理解这个主题。
在 Java 中更新 Hashmap 的值
发布时间:2023/12/17 浏览次数:146 分类:Java
-
本文介绍了如何在 Java 中更新 HashMap 中的一个值。本文介绍了如何在 Java 中使用 HashMap 类中包含的两个方法-put() 和 replace() 更新 HashMap 中的值。
Java 中的 hashmap 和 map 之间的区别
发布时间:2023/12/17 浏览次数:79 分类:Java
-
本文介绍了 Java 中的 hashmap 和 map 接口之间的区别。本教程介绍了 Java 中 Map 和 HashMap 之间的主要区别。在 Java 中,Map 是用于以键值对存储数据的接口,
在 Java 中获取用户主目录
发布时间:2023/12/17 浏览次数:218 分类:Java
-
这篇文章向你展示了如何在 Java 中获取用户主目录。本教程介绍了如何在 Java 中获取用户主目录,并列出了一些示例代码以指导你完成该主题。
Java 中 size 和 length 的区别
发布时间:2023/12/17 浏览次数:179 分类:Java
-
这篇文章教你如何知道 Java 中大小和长度之间的区别。本教程介绍了 Java 中大小和长度之间的区别。我们还列出了一些示例代码以帮助你理解该主题。
Java 中的互斥锁
发布时间:2023/12/17 浏览次数:111 分类:Java
-
了解有关 Java 中互斥锁的一切,在计算机科学领域,互斥或互斥被称为并发控制的属性。每台计算机都使用称为线程的最小程序指令序列。有一次,计算机在一个线程上工作。为了更好地理解,