guava中ImmutableList使用示例详解
ImmutableList是一个不可变、线程安全的列表集合,它只会获取传入对象的一个副本,而不会影响到原来的变量或者对象,如下代码:
int a = 23;ImmutableList<Integer> list = ImmutableList.of(a, 12);System.out.println(list);a = 232;System.out.println(list);
输出结果:‘
[23, 12]
[23, 12]
ImmutableList创建不可变对象有两种方法,一种是使用静态of方法,另外一种是使用静态内部类Builder。
- 静态内部类构建方法
先看下源码,他是一个静态内部类,使用static和final修饰符,来辅助外部类ImmutableList构建不可变的集合对象 -
public static final class Builder<E>extends ImmutableCollection.Builder<E>{private Object[] contents;private int size;public Builder(){this(4);}Builder(int capacity){this.contents = new Object[capacity];this.size = 0;}Builder<E> ensureCapacity(int minCapacity){if (this.contents.length < minCapacity) {this.contents = ObjectArrays.arraysCopyOf(this.contents, expandedCapacity(this.contents.length, minCapacity));}return this;}public Builder<E> add(E element){Preconditions.checkNotNull(element);ensureCapacity(this.size + 1);this.contents[(this.size++)] = element;return this;}public Builder<E> addAll(Iterable<? extends E> elements){if ((elements instanceof Collection)) {Collection<?> collection = (Collection)elements;ensureCapacity(this.size + collection.size());}super.addAll(elements);return this;}public Builder<E> add(E... elements){for (int i = 0; i < elements.length; i++) {ObjectArrays.checkElementNotNull(elements[i], i);}ensureCapacity(this.size + elements.length);System.arraycopy(elements, 0, this.contents, this.size, elements.length);this.size += elements.length;return this;}public Builder<E> addAll(Iterator<? extends E> elements){super.addAll(elements);return this;}public ImmutableList<E> build(){switch (this.size) {case 0: return ImmutableList.of();case 1: E singleElement = this.contents[0];return ImmutableList.of(singleElement);}if (this.size == this.contents.length){return new RegularImmutableList(this.contents);}return new RegularImmutableList(ObjectArrays.arraysCopyOf(this.contents, this.size));}}使用的具体示例:
-
//使用内部类的方式ImmutableList<Integer> list = ImmutableList .<Integer>builder().add(12).add(23).add(34).build(); - 静态方法
静态方法提供了多个参数的of静态方法 -
//获取一个空的不可变集合对象ImmutableList<String> list1 = ImmutableList .<String>of();//获取一个有一个元素的不可变集合对象ImmutableList<String> list2 = ImmutableList .<String>of("12");//获取一个有两个元素的不可变集合对象ImmutableList<String> list3 = ImmutableList .<String>of("12","23"); - 复制数组中的元素到ImmutableList中
-
List<String> list4 = new ArrayList<String>();list4.add("1");list4.add("2");list4.add("3");//copy数组list4的一个副本List<String> list5 = ImmutableList .<String>copyOf(list4);
相关文章:
guava中ImmutableList使用示例详解
ImmutableList是一个不可变、线程安全的列表集合,它只会获取传入对象的一个副本,而不会影响到原来的变量或者对象,如下代码: int a 23;ImmutableList<Integer> list ImmutableList.of(a, 12);System.out.println(list);a …...
ASE28N50-ASEMI高压N沟道MOS管ASE28N50
编辑-Z ASE28N50在TO-247封装里的静态漏极源导通电阻(RDS(ON))为200mΩ,是一款N沟道高压MOS管。ASE28N50的最大脉冲正向电流ISM为110A,零栅极电压漏极电流(IDSS)为1uA,其工作时耐温度范围为-55~150摄氏度。ASE28N50功…...
MyBatis缓存
文章目录MyBatis的缓存1、缓存概述2、MyBatis的一级缓存2.1 一级缓存的使用2.2 一级缓存的失效3、MyBatis的二级缓存3.1 二级缓存的开启3.2 二级缓存的失效3.2 二级缓存相关配置4、系统缓存的查询顺序5、EHCache的使用5.1 EHCache基本介绍5.2 EHCache的基本使用5.3 EHCache配置…...
Linux环境下(CentOS 7)安装Java(JDK8)
Linux环境下(CentOS 7)安装Java(JDK8) 一、安装教程 1.1 首先,进入oracle官网下载jdk8的安装包,下载地址如下,这里以 jdk-8u121-linux-x64.tar.gz安装包为例。 http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-21…...
基于STM32L431+Liteos的串口空闲中断加DMA循环接收
①MCU为STM32L431,使用串口2。 ②Liteos采用接管中断的方式。 STM32CubeMX配置生成串口代码: 串口DMA接收和发送配置区别是接收采用循环模式,发送为正常模式。 将生成的代码移植到liteos工程中,由于使用的接管中断的方式&#…...
BZOJ4403 序列统计
题目描述 给定三个正整数N、L和R,统计长度在1到N之间,元素大小都在L到R之间的单调不降序列的数量。输出答案对106310^631063取模的结果。 输入 输入第一行包含一个整数T,表示数据组数。 第2到第T1行每行包含三个整数N、L和R,N、…...
如何正确使用 钳位二极管
在电路设计中,经常遇到需要IO保护的场景,比如ADC采样,GPIO接收电平信号等。 常见的保护方法有分压,限幅,限流等。本次我们讨论限幅方法中的 钳位二极管。 我们以BAT54S为例,它的符号是这样的, 而在很多手册里,我们可以看到,一般是这样使用的: 因此,我设计了简化…...
【C语言进阶】动态内存管理
👦个人主页:Weraphael ✍🏻作者简介:目前是C语言学习者 ✈️专栏:C语言航路 🐋 希望大家多多支持,咱一起进步!😁 如果文章对你有帮助的话 欢迎 评论💬 点赞&a…...
第一批因ChatGPT坐牢的人,已经上路了
大家好,我是 Jack。 ChatGPT 的火爆有目共睹,有人靠着它赚了第一桶金,也有人靠着它即将吃上第一顿牢饭。 任何一件东西的火爆,总会给一些聪明人带来机会。 艾尔登法环火的时候,一堆淘宝卖魂的;羊了个羊火…...
Eclipse下Maven的集成
Eclipse下Maven的集成 2.1指定本地maven环境 参考:Eclipse的Maven创建_叶书文的博客-CSDN博客_eclipse创建maven项目 指定用本地maven指定maven仓库设置和地址2.2创建maven项目 1.新建 2.目录设置 3.坐标设置(随便写就行) 4.目录结构 2.3配置…...
Elasticsearch7学习笔记(尚硅谷)
文章目录一、ElasticSearch概述1、ElasticSearch是什么2、全文搜索引擎3、ElasticSearch 和 Solr3.1 概述3.2 比较总结二、Elasticsearch入门1、Elasticsearch安装1.1 下载使用1.2 数据格式2、索引操作3、文档操作(了解)3.1 创建文档3.2 文档查询3.3 文档…...
前端学习第一阶段-第7章 品优购电商项目
7-1 品优购项目介绍及准备工作 01-品优购项目导读 02-网站制作流程 03-品优购项目规划 04-品优购项目搭建 05-品优购项目-样式的模块化开发 06-品优购项目-favicon图标制作 07-品优购项目-TDK三大标签SEO优化 7-2 首页Header区域实现 08-品优购首页-快捷导航shortcut结构搭建 0…...
cocos2dx 4.0 - cpp - pc版 环境搭建
开发环境vs2022 cocos2dx4.0 python2.7.18 cmake3.25安装教程(环境搭建)安装VS2022-Community, 勾选c进行安装安装cmake3.25, 勾选环境变量进行安装安装python2.7.18, 勾选环境变量进行安装下载cocos2dx4.0并解压配置cocos2dx:运行cmd,进入…...
剑指 Offer 53 - I. 在排序数组中查找数字 I
原题链接 难度:easy\color{Green}{easy}easy 题目描述 统计一个数字在排序数组中出现的次数。 示例 1: 输入: nums [5,7,7,8,8,10], target 8 输出: 2示例 2: 输入: nums [5,7,7,8,8,10], target 6 输出: 0提示: 0<nums.length<1050 <…...
华为OD机试 - 删除指定目录(Python) | 机试题算法思路 【2023】
最近更新的博客 华为OD机试 - 热点网络统计 | 备考思路,刷题要点,答疑 【新解法】 华为OD机试 - 查找单入口空闲区域 | 备考思路,刷题要点,答疑 【新解法】 华为OD机试 - 好朋友 | 备考思路,刷题要点,答疑 【新解法】 华为OD机试 - 找出同班小朋友 | 备考思路,刷题要点…...
PowerShell Install Office 2021 Pro Plus Viso Professional
前言 微软Office在很长一段时间内都是最常用和最受欢迎的软件。从小型创业公司到大公司,它的使用比例相当。它可以很容易地从微软的官方网站下载。但是,微软只提供安装程序,而不提供完整的软件供下载。这些安装文件通常比较小。下载并运行后,安装的文件将从后端服务器安装M…...
KubeSphere实战
文章目录一、KubeSphere平台安装1、Kubernetes上安装KubeSphere1.1 安装docker1.2 安装Kubernetes1.3 前置环境之nfs存储1.4 前置环境之metrics-server1.5 安装KubeSphere2、Linux单节点部署KubeSphere3、Linux多节点部署KubeSphere(推荐)二、KubeSphere实战1、多租户实战2、中…...
Linux 简介
Linux 内核最初只是由芬兰人林纳斯托瓦兹(Linus Torvalds)在赫尔辛基大学上学时出于个人爱好而编写的。 Linux 是一套免费使用和自由传播的类 Unix 操作系统,是一个基于 POSIX 和 UNIX 的多用户、多任务、支持多线程和多 CPU 的操作系统。 …...
java面试题-泛型异常反射
泛型1.什么是泛型?Java是一种强类型语言,数据类型在编译时必须确定。如果我们想要在代码中使用不同类型的数据,那么就需要为每种类型分别写出相应的代码。这样会导致代码冗长、重复,也不便于维护。为了解决这个问题,Ja…...
详细解读ChatGPT:如何调用ChatGPT的API接口到官方例子的说明以及GitHub上的源码应用和csdn集成的ChatGPT
文章目录1. 解读ChatGPT1.1 词语解释1.2 功能解读2. GitHub上ChatGPT的应用源码3. 调用ChatGPT的API4. 官方例子说明5. 集成ChatGPT自ChatGPT出来到如今,始终走在火热的道路上,如今日活用户破亿,他为何有如此大的魅力,深受广大用户…...
OmenSuperHub终极指南:免费解锁惠普OMEN游戏本隐藏性能的完整教程
OmenSuperHub终极指南:免费解锁惠普OMEN游戏本隐藏性能的完整教程 【免费下载链接】OmenSuperHub 使用 WMI BIOS控制性能和风扇速度,自动解除DB功耗限制。 项目地址: https://gitcode.com/gh_mirrors/om/OmenSuperHub OmenSuperHub是一款专为惠普…...
从手机拍照到工业质检:聊聊自适应白平衡算法在实际项目里的那些‘坑’
从手机拍照到工业质检:自适应白平衡算法的实战避坑指南 在工业视觉检测线上,一台价值百万的自动化设备突然频繁误判产品颜色——原因竟是车间顶灯老化导致色温偏移,而算法团队引以为傲的"完美反射"白平衡模型完全失效。类似场景每天…...
从STM32F103到RP2040:新手如何用Arduino快速上手这块‘网红’双核MCU(附Wokwi在线仿真链接)
从STM32F103到RP2040:用Arduino生态快速征服双核MCU 第一次拿到RP2040开发板时,我习惯性地翻出STM32的工程模板准备移植——直到发现这个拇指大小的板子藏着两个能跑到133MHz的Arm Cortex-M0核心。作为从STM32F103时代走过来的开发者,我们早…...
避坑指南:树莓派4B用FFmpeg推USB摄像头流,我踩过的那些编译和权限的坑
树莓派4B USB摄像头推流实战:从编译陷阱到系统服务的深度排雷手册 当你在树莓派4B上尝试用FFmpeg推送USB摄像头流时,是否遇到过这样的场景:按照教程一步步操作,却在编译阶段卡在OMX报错,或是明明设备识别成功却提示权…...
观察Taotoken在多模型并发请求下的稳定性与响应表现
🚀 告别海外账号与网络限制!稳定直连全球优质大模型,限时半价接入中。 👉 点击领取海量免费额度 观察Taotoken在多模型并发请求下的稳定性与响应表现 在实际业务开发中,我们常常需要同时调用多个不同的大模型来处理不…...
AI提示词工程:用Claude+Cursor构建高效创意工作流
1. 项目概述:当创意遇上AI,一个提示词库如何改变工作流如果你是一位创意工作者——无论是设计师、插画师、文案策划还是视频创作者,最近几个月,你的工作流里可能多了一个新伙伴:Claude。这个由Anthropic推出的AI助手&a…...
别再乱改网段了!深入理解 VMware NAT 与桥接模式:根据你的真实需求选择网络配置(附场景对比)
深度解析VMware网络模式:NAT与桥接的实战选择指南 虚拟化技术已成为现代开发与测试环境的核心基础设施,而网络配置的选择往往决定了整个工作流的顺畅程度。许多用户在初次接触VMware Workstation时,面对NAT、桥接等模式常感到困惑——究竟哪种…...
我用了半年只留下这1个!2026年英语录音转文字选它真不踩坑
做学术调研的朋友多半都遇过这些坑:熬了半个月跑了10场受访者访谈,攒了8小时录音,手动整理整整花了一周,眼睛都熬花了还错漏一堆;听国外名家讲座录了音,转写工具一堆专业词汇识别错,口音还认不出…...
技术深度解析:5大核心要点掌握Sunshine开源游戏串流服务器实战部署
技术深度解析:5大核心要点掌握Sunshine开源游戏串流服务器实战部署 【免费下载链接】Sunshine Self-hosted game stream host for Moonlight. 项目地址: https://gitcode.com/GitHub_Trending/su/Sunshine Sunshine是一款功能强大的自托管开源游戏串流服务器…...
pip cache purge 清理下载缓存文件
如上图所示的这个目录是 Python 的包管理工具 pip 用来存储下载过的安装包(wheel 或源码包)的缓存。它的主要作用是在你下次安装同一个包时,可以直接从本地读取,而无需再次从网络下载,从而加快安装速度。 但是…...
