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

购物网站开发语言/北京seo外包 靠谱

购物网站开发语言,北京seo外包 靠谱,kali钓鱼网站制作,招标网上的项目好中标吗一、集合 1. java中如何给一个超大的一个亿左右的list数据去重? 我当时的回答是使用HashSet或Stream流的distinct语法。但是面试官好像更注重内存的消耗问题。 使用HashSet: HashSet 是一个不允许有重复元素的集合。你可以将List中的元素添加到HashSe…

一、集合

1. java中如何给一个超大的一个亿左右的list数据去重?

我当时的回答是使用HashSet或Stream流的distinct语法。但是面试官好像更注重内存的消耗问题。

  • 使用HashSet:
    HashSet 是一个不允许有重复元素的集合。你可以将List中的元素添加到HashSet中,然后再将HashSet转换回List(如果你需要的话)。但请注意,这种方法只适用于可以安全地在HashSet中存储的元素(即实现了正确的hashCode()和equals()方法的对象)。
List<YourType> originalList = ... // 你的原始列表
Set<YourType> set = new HashSet<>(originalList);
List<YourType> uniqueList = new ArrayList<>(set);

但是,如果List中的元素非常大(例如,每个元素都是一个复杂的对象),那么将整个List添加到HashSet中可能会消耗大量内存。

  • 流式处理(Stream API):
    如果你使用的是Java 8或更高版本,你可以使用Stream API进行去重。但是,流式处理可能不适用于非常大的数据集,因为它需要在内存中构建中间结果。
List<YourType> uniqueList = originalList.stream().distinct().collect(Collectors.toList());

与HashSet方法类似,这种方法也依赖于元素的hashCode()和equals()方法的正确实现。

  • bigSet:参考:https://blog.csdn.net/qq_44591181/article/details/138843109
    个人柑橘bigSet更适合存数字的去重
import java.util.ArrayList;
import java.util.BitSet;
import java.util.HashMap;
import java.util.List;
import java.util.Map;class MyObject {private int id; // 假设对象有一个唯一的ID属性// 构造函数、getter、setter等...
}public class ListDeduplicationWithBitmapForObjects {// 假设我们有一个函数可以将对象映射到唯一的整数IDpublic static int getIdFromObject(MyObject obj) {return obj.getId(); // 示例:直接返回对象的ID属性}public static List<MyObject> deduplicateListWithBitmap(List<MyObject> list) {// 假设我们知道可能的最大ID是maxValue(实际情况中需要根据数据确定)int maxValue = ...; // 例如,如果你的ID范围是0到100000000,则maxValue = 100000000// 创建一个BitSet,大小为maxValue+1BitSet bitSet = new BitSet(maxValue + 1);// 遍历原始List,并将对象的ID设置为true在BitSet中for (MyObject obj : list) {int id = getIdFromObject(obj);if (id >= 0 && id <= maxValue) { // 确保ID在有效范围内bitSet.set(id);}}// 创建一个新的List来存储去重后的对象(如果需要的话)List<MyObject> deduplicatedList = new ArrayList<>();// 如果你需要保留去重后的对象列表,你可能需要额外的数据结构来存储对象与ID的映射// 这里只是一个简单的示例,我们假设你可以从ID直接获取到对象(这通常不现实)// 遍历BitSet(如果需要的话,可以将ID转换回对象并添加到deduplicatedList中)// 但在这个简单的示例中,我们仅打印去重后的IDfor (int i = bitSet.nextSetBit(0); i >= 0; i = bitSet.nextSetBit(i + 1)) {// MyObject obj = getObjectFromId(i); // 假设你有这样的函数可以从ID获取对象System.out.println(i); // 或者打印出对象的ID// deduplicatedList.add(obj); // 如果需要的话,将对象添加到列表中}// 注意:这个示例没有返回去重后的对象列表,因为它取决于你如何存储和检索对象// 根据你的具体需求,你可能需要实现getObjectFromId函数或其他逻辑来恢复对象return null; // 或者返回一个空的deduplicatedList,取决于你的需求}public static void main(String[] args) {// 示例:创建一个包含重复对象的ListList<MyObject> list = new ArrayList<>();// ... 添加对象到list中 ...// 去重(并可能打印结果,取决于你的实现)deduplicateListWithBitmap(list);}
}

内存占用比较:
在内存消耗有限制的场景中,使用BitSet来去重确实可以比使用HashSet更加节省内存,特别是在处理大量整数或可以映射到整数的对象时。但是,节省的内存量取决于具体的数据集和整数ID的分布情况。

以下是使用BitSet与HashSet去重时内存消耗的对比:

BitSet:

BitSet使用位(bit)来表示每个可能的元素是否出现过。因此,如果你知道可能的ID范围是0到maxValue,那么BitSet将使用(maxValue + 1) / 8个字节(因为一个字节有8位)。
BitSet不会为那些未使用的ID分配内存,因此它的内存使用是固定的,并且基于ID范围的上限。
HashSet:

HashSet使用哈希表来存储对象,每个对象都映射到一个哈希桶(bucket)。哈希表的大小通常是基于负载因子(load factor)和预期的元素数量来动态调整的。
对于整数,如果直接使用HashSet,那么每个Integer对象本身就需要一定的内存(大约16到24字节,取决于JVM和JVM设置)。此外,哈希表本身也需要额外的内存来存储桶数组和链表或红黑树(用于解决哈希冲突)。
对于对象,HashSet会存储对象的引用,所以实际的内存消耗还取决于对象的大小。
内存占用的减少量:

如果你的ID范围是连续的,并且你知道这个范围,那么BitSet的内存消耗将是固定的,并且通常远低于HashSet。
假设maxValue是100,000,000,BitSet将需要大约12.5MB((100,000,000 + 1) / 8 / 1024 / 1024)。而使用HashSet存储这么多Integer对象将需要显著更多的内存。
如果对象本身很大,那么HashSet的内存消耗将更高。
注意事项:

BitSet只适用于可以映射到整数ID的对象,并且这些ID的范围是已知的且相对较小的。
BitSet不支持直接存储对象,因此如果你需要保留去重后的对象列表,你需要额外的数据结构(如HashMap)来存储对象与ID之间的映射。
HashSet提供了更通用的去重功能,可以处理任何类型的对象,而不仅仅是整数或可以映射到整数的对象。
在选择使用哪种方法时,请考虑你的具体需求,包括内存限制、数据类型、对象大小以及是否需要保留去重后的对象列表等因素。

相关文章:

java面试-场景题

一、集合 1. java中如何给一个超大的一个亿左右的list数据去重&#xff1f; 我当时的回答是使用HashSet或Stream流的distinct语法。但是面试官好像更注重内存的消耗问题。 使用HashSet&#xff1a; HashSet 是一个不允许有重复元素的集合。你可以将List中的元素添加到HashSe…...

【TORCH】matplotlib绘制一条横线的两种方法

在创建图形和数据可视化时&#xff0c;你提到的两种方法都用于绘制特定的线条&#xff0c;但它们在实现方式上有所不同。我将逐一解释这两种方法的具体含义和用途。 1. 使用列表创建常数值的线条 y [1] * len(x)这行代码生成了一个列表 y&#xff0c;其长度与 x 相同&#x…...

深入浅出mediasoup—WebRtcTransport

mediasoup 提供了多种 transport&#xff0c;包括 WebRtcTransport、PipeTransport、DirectTransport、PlainTransport 等&#xff0c;用来实现不同目的和场景的媒体通信。WebRtcTransport 是 mediasoup 实现与 WebRTC 客户端进行媒体通信的对象&#xff0c;是 mediasoup 最重要…...

如何让局域网中的其他电脑访问VMWare虚拟机上的Windows虚拟系统

场景描述 事情是这样的&#xff0c;我在我的主机&#xff08;Win10&#xff09;上搭建了一个VMWare虚拟机&#xff0c;并安装了Windows Server的虚拟系统&#xff0c;想用它来测试一些东西。但是呢&#xff0c;我发现尽管我的主机可以愉快地跟这个服务器对话&#xff0c;可办公…...

旧电脑回收前怎么清除数据

随着技术的快速更新换代&#xff0c;很多人的电脑也会不断的更新升级&#xff0c;比如给电脑升级硬件或是更换新电脑&#xff0c;从而获得更好的性能和体验。那么旧的电脑及电脑部件怎么处理更安全呢&#xff1f;我们要确保旧电脑上的个人数据被彻底清除干净&#xff0c;这样可…...

python——TinyDB

TinyDB 是一个轻量级的纯 Python 写入的文档数据库。它不需要单独的服务器进程或复杂的配置&#xff0c;只需导入模块即可开始使用。TinyDB 适合于小型项目或测试用例&#xff0c;它的数据存储在本地文件中。 TinyDB 的基本 API 和使用方式&#xff1a; 初始化数据库 from tin…...

【北京迅为】《i.MX8MM嵌入式Linux开发指南》-第三篇 嵌入式Linux驱动开发篇-第三十八章 驱动模块编译进内核

i.MX8MM处理器采用了先进的14LPCFinFET工艺&#xff0c;提供更快的速度和更高的电源效率;四核Cortex-A53&#xff0c;单核Cortex-M4&#xff0c;多达五个内核 &#xff0c;主频高达1.8GHz&#xff0c;2G DDR4内存、8G EMMC存储。千兆工业级以太网、MIPI-DSI、USB HOST、WIFI/BT…...

Mailspring搭建安装教程:打造个性邮件体验

Mailspring搭建安装教程步骤&#xff01;如何选择电子邮件服务商&#xff1f; Mailspring作为一款功能强大、界面友好的邮件客户端&#xff0c;成为了许多用户的首选。AokSend将为大家提供详细的Mailspring搭建安装教程&#xff0c;帮助您打造个性化的邮件体验。 Mailspring搭…...

【分布式锁】Redission实现分布式锁

接着上一节&#xff0c;我们遇到了超卖的问题&#xff0c;并通过Redis实现分布式锁&#xff0c;进行了解决。本节 我将换一种方式实现分布式锁。 前提&#xff1a; nginx、redis、nacos 模块1&#xff1a; provider-and-consumer 端口 8023 模块2 rabbitmq-consumer 端口 8021 …...

UE4/5 对话系统

参考教程&#xff1a;UE4甜筒教艺术生学蓝图#21.UE4对话系统(1)--唠嗑案例展示_哔哩哔哩_bilibili 说来惭愧两年前看的教程&#xff0c;现在才记录一下&#xff0c;很好的教程推荐大家观看 1.首先创建两个枚举&#xff0c;内容如下 2.创建三个结构体&#xff0c;内容如下 3.再…...

Golang | Leetcode Golang题解之第275题H指数II

题目&#xff1a; 题解&#xff1a; func hIndex(citations []int) int {n : len(citations)return n - sort.Search(n, func(x int) bool { return citations[x] > n-x }) }...

Python—面向过程编程,详细讲解(类和实例,初始化函数,类中封装数据与操作)

1.类和实例 类&#xff1a;类别 实例&#xff08;对象&#xff09;&#xff1a;类型塑造出来的某一个具体的内容 isinstance(对象&#xff0c;类) 返回一个对象是否是一个类的实例 # 声明一个整数类的实例10 a int(10) # a 10 print(type(a), isinstance(a, int)) a flo…...

Linux云计算 |【第一阶段】SERVICES-DAY2

主要内容&#xff1a; DNS服务基础及搭建、特殊解析(针对地址库文件&#xff1a;DNS轮询 DNS泛域名解析 DNS别名&#xff09;、缓存DNS&#xff08;全局转发forwarders&#xff09;、DNS递归迭代&#xff08;子域授权&#xff09;、DNS主从架构搭建、DNS主从数据同步 一、DNS工…...

el-upload照片墙自定义上传多张图片(手动一次性上传多张图片)包含图片回显,删除

需求&#xff1a;el-upload照片墙自定义上传多张图片&#xff08;手动一次性上传多张图片&#xff09;包含图片回显&#xff0c;删除&#xff0c;预览&#xff0c;在网上看了很多&#xff0c;都没有说怎么把数据转为file格式的&#xff0c;找了很久最终实现&#xff0c; 难点&a…...

三星Unpacked发布会即将举行:有新款折叠屏手机,还有智能戒指

随着7月的脚步渐近&#xff0c;科技界的目光再次聚焦于三星&#xff0c;它即将在法国巴黎举办今年的第二场Unpacked发布会。这不仅是一场新品的展示&#xff0c;更是三星对创新科技的一次深刻诠释。 从Galaxy Z Fold 6的全新设计&#xff0c;到Galaxy Z Flip 6的显著升级&…...

【Python】Matplotlib简要教程

文章目录 一、简介二、一些基本概念2.1 图表元素2.2 常见图表类型2.3 主要绘图函数及其返回值2.4 Artists 的概念 三、基本图表详解3.1 成对数据3.11 折线图&#xff1a;plot()&#x1f7e8;设置图表样式&#x1f7e8;设置各种标签&#x1f7e8;设置坐标轴&#x1f7e8;绘制子图…...

数驭未来,景联文科技构建高质大模型数据库

国内应用层面的需求推动AI产业的加速发展。根据IDC数据预测&#xff0c;预计2026年中国人工智能软件及应用市场规模会达到211亿美元。 数据、算法、算力是AI发展的驱动力&#xff0c;其中数据是AI发展的基石&#xff0c;中国的数据规模增长速度预期将领跑全球。 2024年《政府工…...

视频汇聚平台EasyCVR启动出现报错“cannot open shared object file”的原因排查与解决

安防视频监控EasyCVR安防监控视频系统采用先进的网络传输技术&#xff0c;支持高清视频的接入和传输&#xff0c;能够满足大规模、高并发的远程监控需求。EasyCVR平台支持多种视频流的外部分发&#xff0c;如RTMP、RTSP、HTTP-FLV、WebSocket-FLV、HLS、WebRTC、fmp4等&#xf…...

VMware 安装完,设备管理器中没有虚拟网卡(vmnet0、wmnet1、vmnet8) / 虚拟网络编辑器中没有桥接模式

问题&#xff1a;VMware 安装完&#xff0c;设备管理器中没有虚拟网卡(vmnet0、wmnet1、vmnet8) / 虚拟网络编辑器中没有桥接模式 1、确认 Device Install Service 和 Device Setup Manager 没有被禁用 Device Install Service 和 Device Setup Manager是 Windows 操作系统中…...

构建高效Node.js中间层:探索请求合并转发的艺术

&#x1f389; 博客主页&#xff1a;【剑九 六千里-CSDN博客】 &#x1f3a8; 上一篇文章&#xff1a;【CSS盒模型&#xff1a;掌握网页布局的核心】 &#x1f3a0; 系列专栏&#xff1a;【面试题-八股系列】 &#x1f496; 感谢大家点赞&#x1f44d;收藏⭐评论✍ 引言&#x…...

中断和EXIT原理介绍

中断和EXIT原理介绍 一、中断的介绍&#xff1f;二、EXIT的介绍1.EXIT作用2.EXIT的详情3.EXIT中AFIO复用的作用4.STM32中AFIO复用作用 一、中断的介绍&#xff1f; 二、EXIT的介绍 EXTI&#xff08;Extern Interrupt&#xff09;外部中断 1.EXIT作用 EXTI可以监测指定GPIO口…...

vcpkg或者命令行需要设置代理时如何设置

当使用命令行或者vcpkg时&#xff0c;有时候需要设置代理来下载一些代码&#xff0c;那么可以这样&#xff1a; 本地先起一个http或者socks5的代理服务器。监听127.0.0.1:10808如果本地是http代理服务器&#xff0c;在命令行执行&#xff1a; set http_proxyhttp://127.0.0.1:…...

tensorflow安装及数据操作----学习笔记(一)

安装Miniconda 下载对应系统版本的Miniconda。我的系统是ubuntu&#xff0c;所以选择Miniconda3 Linux 64-bit。下载后执行下载的sh脚本 sh Miniconda3-latest-Linux-x86_64.sh -b执行后&#xff0c;运行conda初始化命令 ~/miniconda3/bin/conda init关闭当前命令终端&#…...

顺序表和单链表的经典算法题

目录 前言 一、基础思想&#xff08;数组&#xff09; 1. 移除元素 2.删除有序元素的重复项 3.合并两个有序数组 二、单链表算法 1.移除链表元素 2.翻转链表 3.合并两个有序的链表 前言 Hello,小伙伴们&#xff0c;今天我们来做一个往期知识的回顾&#xff0c;今天我将…...

python基础知识点(蓝桥杯python科目个人复习计划71)

做些简单题 第一题&#xff1a;确定字符串是否包含唯一字符 题目描述&#xff1a; 实现一个算法来识别一个字符串的字符是否是唯一的。 若唯一输出YES&#xff0c;否则输出NO。 输入描述&#xff1a; 输入一个字符串&#xff0c;长度不超过100. 输出描述; 输出一行&…...

【大数据专题】Flink题库

1 . 简述什么是Apache Flink &#xff1f; Apache Flink 是一个开源的基于流的有状态计算框架。它是分布式地执行的&#xff0c;具备低延迟、高吞吐的优秀性能&#xff0c;并且非常擅长处理有状态的复杂计算逻辑场景 2 . 简述Flink 的核心概念 &#xff1f; Flink 的核心概念…...

Python鲁汶意外莱顿复杂图拓扑分解算法

&#x1f3af;要点 &#x1f3af;算法池化和最佳分区搜索&#xff1a;&#x1f58a;网格搜索 | &#x1f58a;发现算法池 | &#x1f58a;返回指定图的最佳划分 | &#x1f58a;返回指定图的最佳分区 | &#x1f3af;适应度和聚类比较功能&#xff1a;&#x1f58a;图的划分 |…...

【C++】类和对象之继承

目录 继承的概念和定义 继承的概念 继承的定义 继承的定义格式 继承关系和访问限定符 继承基类成员访问方式的变化 访问权限实例 基类和派生类对象赋值转换 继承中的作用域 派生类的默认成员函数 继承与友元 继承与静态成员 复杂的菱形继承及菱形虚拟继承 继承的…...

如何在LlamaIndex中使用RAG?

如何在LlamaIndex中使用RAG 什么是 Llama-Index LlamaIndex 是一个数据框架&#xff0c;用于帮助基于 LLM 的应用程序摄取、构建结构和访问私有或特定领域的数据。 如何使用 Llama-Index ? 基本用法是一个五步流程&#xff0c;将我们从原始、非结构化数据导向基于该数据生成…...

css气泡背景特效

css气泡背景特效https://www.bootstrapmb.com/item/14879 要创建一个CSS气泡背景特效&#xff0c;你可以使用CSS的伪元素&#xff08;:before 和 :after&#xff09;、border-radius 属性来创建圆形或椭圆形的“气泡”&#xff0c;以及background 和 animation 属性来设置背景…...