当前位置: 首页 > article >正文

Java 从数组中查找重复元素的几种方法

在 Java 中,可以通过以下几种方式从一个数组中找出重复的元素:

方法 1: 使用 HashSet

HashSet 是一个不允许重复元素的集合。我们可以利用这个特性来找出数组中的重复元素。

import java.util.HashSet;
import java.util.Set;

public class FindDuplicates {
    public static void main(String[] args) {
        int[] array = {1, 2, 3, 4, 2, 5, 6, 3, 7, 8, 8};

        Set<Integer> set = new HashSet<>();
        Set<Integer> duplicates = new HashSet<>();

        for (int num : array) {
            if (!set.add(num)) {
                duplicates.add(num);
            }
        }

        System.out.println("重复的元素: " + duplicates);
    }
}

方法 2: 使用 HashMap

HashMap 可以用来统计每个元素的出现次数,从而找出重复的元素。

import java.util.HashMap;
import java.util.Map;

public class FindDuplicates {
    public static void main(String[] args) {
        int[] array = {1, 2, 3, 4, 2, 5, 6, 3, 7, 8, 8};

        Map<Integer, Integer> map = new HashMap<>();
        for (int num : array) {
            map.put(num, map.getOrDefault(num, 0) + 1);
        }

        System.out.print("重复的元素: ");
        for (Map.Entry<Integer, Integer> entry : map.entrySet()) {
            if (entry.getValue() > 1) {
                System.out.print(entry.getKey() + " ");
            }
        }
    }
}

方法 3: 使用双重循环

这种方法比较直接,但时间复杂度较高(O(n^2)),适用于小规模数组。

public class FindDuplicates {
    public static void main(String[] args) {
        int[] array = {1, 2, 3, 4, 2, 5, 6, 3, 7, 8, 8};

        System.out.print("重复的元素: ");
        for (int i = 0; i < array.length; i++) {
            for (int j = i + 1; j < array.length; j++) {
                if (array[i] == array[j]) {
                    System.out.print(array[i] + " ");
                    break;
                }
            }
        }
    }
}

方法 4: 使用 Java 8 的 Stream API

Java 8 引入了 Stream API,可以更简洁地处理集合和数组。

import java.util.Arrays;
import java.util.HashSet;
import java.util.Set;
import java.util.stream.Collectors;

public class FindDuplicates {
    public static void main(String[] args) {
        int[] array = {1, 2, 3, 4, 2, 5, 6, 3, 7, 8, 8};

        Set<Integer> set = new HashSet<>();
        Set<Integer> duplicates = Arrays.stream(array)
                                        .filter(num -> !set.add(num))
                                        .boxed()
                                        .collect(Collectors.toSet());

        System.out.println("重复的元素: " + duplicates);
    }
}

总结

  • HashSetHashMap 是常用的数据结构,适合处理重复元素的问题。
  • 双重循环 方法简单直接,但效率较低,适合小规模数据。
  • Stream API 提供了更方便的编程方式,代码简洁但可能需要更多的资源。

根据开发的需求和数组的大小,可以选择合适的方法来找出重复元素。


http://www.kler.cn/a/520132.html

相关文章:

  • python生成图片和pdf,快速
  • 八股文 (一)
  • React 前端框架实战教程
  • 被占用的电脑文件推沟里
  • [极客大挑战 2019]BuyFlag1
  • 《Trustzone/TEE/安全从入门到精通-标准版》
  • Scratch游戏作品 | 僵尸来袭——生存大战,保卫你的领地!
  • introJs去实现新手指引
  • 第十四讲 JDBC数据库
  • 在亚马逊云科技上使用Luma AI Ray2视频模型生成炫酷视频 (上)
  • Kafka 副本机制(包含AR、ISR、OSR、HW 和 LEO 介绍)
  • Coze插件开发之基于已有服务创建并上架到扣子商店
  • 论文笔记(六十三)Understanding Diffusion Models: A Unified Perspective(三)
  • Java 多线程编程介绍
  • linux-ubuntu学习笔记碎记
  • Git 分支管理与多人协作实战指南
  • 【学习笔记】深度学习网络-深度前馈网络(MLP)
  • ios swift画中画技术尝试
  • 使用Docker构建Node.js应用的详细指南
  • chrome源码剖析—进程通信
  • 99.16 金融难点通俗解释:营业总收入
  • 关于CAN(FD)转以太网详细介绍
  • Hive的安装与部署
  • 算法随笔_23: 通过删除字母匹配到字典里最长单词
  • Windows Defender添加排除项无权限的解决方法
  • 计算机视觉中的目标检测技术