《码出高效:Java开发手册》学习笔记(一)数组与集合

Arrays.asList() 详解 Arrays.asList() 详解 【1. 要点】 该方法是将数组转化成List集合的方法。 List list = Arrays.asList(“a”,“b”,“c”); 注意: (1)该方法适用于对象型数据的数组(String、Integer…) (2)该方法不建议使用于基本数据类型的数组(byte,short,int,long,float,double,boolean) (3)该方法将数组与List列表链接起来:当更新其一个时,另一个自动更新 (4)不支持add()、remove()、clear() 阅读详情

  数组与集合都是用来存储对象的容器,前者性质单一,方便易用;后者类型安全,功能强大,且两者之间必然有相互转化的方式。毕竟他们性格迥异,在转换过程中,如果不注意转换背后的实现方式,很容易产生意料之外的问题。转换分成两种情况:数组转集合和集合转数组。

1、数组转集合

  在数组转集合的过程中,注意是否使用了视图方式直接放回数组中的数据。我们以 Arrays.asList() 为例,它把数组转换成集合时,不能使用其修改集合相关的方法,它的 add/remove/clear 方法会抛出 UnsupportedOperationException 异常。实例源码如下:

public class ArrayAsList {
    public static void main(String[] args) {
        String[] stringArray = new String[3];
        stringArray[0] = "one";
        stringArray[1] = "two";
        stringArray[2] = "three";

        List<String> stringList = Arrays.asList(stringArray);
        // 修改转换后的集合,成功地将第一个元素"one"改成"oneList"
        stringList.set(0,"oneList");
        // 运行结果是"oneList",数组的值随之更改
        System.out.println(stringArray[0]);

        // 这是重点:以下三行编译正确,但都会跑抛出运行时异常
        stringList.add("four");
        stringList.remove(2);
        stringList.clear();
    }
}

  事实证明,可以通过set方法修改元素的值,原有数组相应位置的值同时也会被修改,但是不能进行修改元素的任何操作,否则均会抛出 UnsupportedOperationException 异常。 Arrays.asList 体现的是适配器模式,后台的数据仍是原数组, set() 方法即间接对数组进行值的修改操作。 asList 的返回对象是一个 Array 的内部类,它并没有实现集合个数的相关修改方法,这也正是抛出异常的原因。

2、集合转数组

  相对于数组转集合来说,集合转数组更加可控,毕竟是从相对自由的集合容器转为更加苛刻的数组。什么情况下集合需要转成数组呢?适配别人的接口,或者进行局部方法计算等。先看一个源码,猜猜执行结果:

public class ListToArray {
    public static void main(String[] args) {
        List<String> list = new ArrayList<String>(3);
        list.add("one");
        list.add("two");
        list.add("three");

        // 范型丢失,无法使用String[]接收无参方法返回的结果(第1处)
        Object array1 = list.toArray();

        // array2数组长度小于元素个数(第2处)
        String[] array2 = new String[2];
        list.toArray(array2);
        System.out.println(Arrays.asList(array2));

        // array3数组长度等于元素个数(第3处)
        String[] array3 = new String[3];
        list.toArray(array3);
        System.out.println(Arrays.asList(array3));
    }
}

执行结果如下:
[null,null]
[one,two,three]
  第1处比较容易理解,不要用 toArray() 无参方法把集合转换成数组,这样会导致范型丢失;在第2处与第3处的区别在于即将复制进去的数组容量是否足够。如果容量不够,则弃用此数组,另起炉灶。

CPU核心、die和package的区别:从硬件小白到高手的进阶指南 本文深入浅出地解析了CPU核心、Die与Package的核心概念与区别,是硬件爱好者从入门到精通的实用指南。文章从硅晶圆制造讲起,阐述了物理核心与逻辑线程(如超线程技术)的工作原理,并详细介绍了封装(Package)的作用与多Die模块化设计。最后,结合实际应用场景,提供了选购、性能解读与优化调优的实用建议。 阅读详情

相关推荐

ROS2理论与实践_宇树机器人Go2开发指南(文字)

本文介绍了Unitree Go2机器人ROS2开发环境的安装与配置流程。主要内容包括:1)从GitHub克隆unitree_ros2仓库;2)安装ROS2 Foxy版本依赖项;3)编译特定版本的CycloneDDS(0.10.2);4)编译unitree_go和unitree_api功能包;5)网络配置,包括设置静态IP和修改环境变量脚本setup.sh以指定网络接口。文章还提供了本地回环测试的替代方案,并建议配置完成后重启电脑。整个流程涉及ROS2环境切换、网络适配和编译安装等多个技术环节。

Li_Dongyi的博客 4205

Arrays.asList详解和示例

注意 (1)该方法适用于对象型数据的数组(String、Integer…) (2)该方法不建议使用于基本数据类型的数组(byte,short,int,long,float,double,boolean) (3)该方法将数组与List列表链接起来:当更新其一个时,另一个自动更新 (4)不支持add()、remove()、clear()等方法 (5)此方法得到的List长度是不可变的 (6)asLis...

Venus's Blog 6万+

嵌入式Linux开发:手把手教你调试OV9281摄像头Sensor(基于全志平台DTS配置)

本文详细解析了嵌入式Linux开发中OV9281摄像头Sensor的调试全流程,重点介绍了基于全志平台的DTS配置指南。从硬件信号检测到软件驱动配置,包括设备树关键参数设置、内核驱动适配实战及图像质量调优技巧,为开发者提供了一套完整的调试方案,助力工业视觉和边缘计算设备的开发。

weixin_28716769的博客 371

《码出高效:java开发手册》六-数据结构与集合(一)

本章主要是讲数据结构与集合,这章内容涉及到非常基础的知识,内容相对较多,首先从数组讲起,引申到集合框架,之后再到集合源码,最后介绍了高并发集合框架。

qq_39167720的博客 763

VSCode+Pyside6开发环境配置全攻略:从安装到实战UI设计

本文提供了一份详细的VSCode与Pyside6集成开发环境配置指南。从创建Python虚拟环境、安装必备VSCode插件,到深度配置PYQT Integration插件以打通Qt Designer与代码编译,最后通过一个待办事项应用实战演示了从UI设计到业务逻辑绑定的完整工作流,旨在帮助开发者建立高效、可维护的GUI开发环境。

qq_27496129的博客 980

基于zynq在linux下的AXI-CAN实战

从petalinux的搭建,到uboot、kernel、rootfs的调试、打包提示:以下是本篇文章正文内容,下面案例可供参考本次要讲述的zynq的AXI-CAN实战小知识就说到这里了,兄弟萌要有什么指导意见或疑问可以在评论区留下"足迹"。

qq_45521099的博客 3164

码出高效:Java开发手册笔记(线程池及其源码)

《码出高效,java开发手册》-->线程池笔记 线程池优点及源码分析

Ron_的博客 1566

RSA 2048/4096 签名校验算法

RSA算法是一种非对称密码算法,所谓非对称,就是指该算法需要一对密钥,使用其中一个加密,则需要用另一个才能解密。 RSA是目前最有影响力和最常用的公钥加密算法,它能够抵抗到目前为止已知的绝大多数密码攻击,已被ISO推荐为公钥数据加密标准。 今天只有短的RSA钥匙才可能被强力方式解破。到2008年为止,世界上还没有任何可靠的攻击RSA算法的方式。只要其钥匙的长度足够长,用RSA加密的信息实际上是不能...

qq_38769551的博客 9498

Arrays.asList()方法:隐患与解决之道

方法是将数组转换为List的方法,它返回一个List对象,但这个List对象并不是对象,而是Arrays内部的ArrayList对象。类继承自AbstractList,实现了List接口。它重写了add()remove()等修改List结构的方法,并将它们直接抛出异常,从而禁止了对List结构的修改。具体来说,方法返回的是Arrays类中的一个私有静态内部类ArrayList,它继承自AbstractList类,实现了List接口。方法的使用非常简单,只需要将一个数组作为参数传递给该方法即可。

爱编程的鱼的博客 1945

五步通关!宝塔Linux部署ASP.NET Core的魔法秘籍大公开!

摘要: 本文提供ASP.NET Core应用五步部署攻略,涵盖从环境配置到线上运行的完整流程: 1️⃣ 环境准备:安装宝塔面板、ASP.NET Core运行时及开放端口; 2️⃣ 应用发布:通过dotnet publish生成独立部署包并上传服务器; 3️⃣ Nginx配置:设置反向代理将域名请求转发至应用端口; 4️⃣ 进程守护:使用Supervisor确保应用持续运行; 5️⃣ HTTPS加密:通过宝塔快速申请SSL证书并解决验证路径冲突。 关键点: 强调权限设置(755)、端口开放及反向代理细节; 提

java专栏 969

088、多摄像头跨镜目标追踪 ID 频繁切换?ReID 特征 + 轨迹关联 + 时间约束方案

文章摘要:本文针对多摄像头跨镜目标追踪中ID频繁切换的问题,提出了一种结合ReID特征、轨迹关联和时间约束的综合解决方案。作者分析了ID切换的三个主要原因:ReID特征不稳定、轨迹关联依赖最近邻匹配以及忽略时间约束。通过改进ReID特征提取(多层特征融合)、引入轨迹预测(卡尔曼滤波)和添加时间窗口约束,成功将ID切换率从35%降至3%以下。文章详细分享了实现细节和踩坑经验,为跨摄像头目标追踪提供了实用优化思路。

ai技术增长的博客 169

阿里巴巴Java 开发手册 码出高效,码出质量 1.4.0

前言 《阿里巴巴Java 开发手册》是阿里巴巴集团技术团队的集体智慧结晶和经验总结,经历了多次大规模一线实战的检验及不断完善,系统化地整理成册,回馈给广大开发者。现代软件行业的高速发展对开发者的综合素质要求越来越高,因为不仅是编程知识点,其它维度的知识点也会影响到软件的最终交付质量。比如:数据库的表结构和索引设计缺陷可能带来软件上的架构缺陷或性能风险;工程结构混乱导致后续维护艰难;没有鉴权的漏洞代...

kobe46385076的博客 1194

优快云 2

2

qq_62260432的博客 5237

《码出高效:Java 开发手册》技术笔记

java开发手册》这本书是一本由阿里巴巴公司的开发工程师们编写的技术书籍,相比于其他编程书籍,本书更为贴近一些共通的知识而非实际的代码,对开发工程师的综合素质有显著的提升,本书共有九章,笔者计划用八篇文章去记录读这本书的一些心得和体会。

qq_39167720的博客 839

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

阿里巴巴Java开发手册(最新最全)

阿里巴巴Java开发手册》是阿里巴巴集团技术团队的集体智慧结晶和经验总结,经历了多次大规模一线实战的检验及不断的完善,系统化地整理成册,回馈给广大开发者。现代软件行业的高速发展对开发者的综合素质要求越来越高,因为不仅是编程知识点,其它维度的知识点也会影响到软件的最终交付质量。比如:数据库的表结构和索引设计缺陷可能带来软件上的架构缺陷或性能风险;工程结构混乱导致后续维护艰难;没有鉴权的漏洞代码易被黑客攻击等等。

AffectionGF的博客 4934

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

《码出高效 Java开发手册》第六章 数据结构与集合

码云: https://gitee.com/forxiaoming/JavaBaseCode/blob/master/EasyCoding/src/collection/index.md 6.1 数据结构 1. 数据结构定义: 数据结构是指逻辑意义上的数据组织方式及其相应的处理方式; 1.1. 数据组织方式: 树: 二叉树, 三叉树, B+ 树等; 图: 有向图, 无向图; 队列: 先...

weixin_30748995的博客 167

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

《码出高效:Java开发手册》学习笔记6

一、集合框架图 集合框架主要分为两类:第一类是按照单个存储的Collection,第二类是按照Key-Value存储的Map。 在集合框架图中,红色代表接口,蓝色代表抽象类,绿色代表并发包中的类,灰色代表早期线程安全的类。 1、List集合 ...

FantasyWxw的博客 231

每日学学Java开发规范,集合处理(附阿里巴巴Java开发手册(终极版))

利用不同集合的特性,能快速处理不同的业务,例如Set去重,HashMap,key唯一的特性,已经根据Key获取value达到性能优化。ArrayList和LinkedList的特点去使用。因为有特性,自然就会有缺陷,比如第9点,初始化值,在集合新增数据过程中,会涉及到扩容,每种集合扩容方式都不一样,在新手期间,为了快速编程,很少会去指定集合的初始值,这也导致被老大教育规范。所以,集合处理方面,是很有必要,不只是面试常问,在编码过程中也很重要。

李老头探索的博客 1549

Java开发编码规范手册--码出高效、码出质量

参考与(阿里巴巴JAVA开发手册) 前言 现代软件行业的高速发展对开发者的综合素质要求越来越高,因为不仅是编程知识点,其它维度的知识点也会影响到软件的最终交付质量。 数据库的表结构和索引设计缺陷可能带来软件上的架构缺陷或性能风险;工程结构混乱导致后续维护艰难;没有鉴权的漏洞代码易被黑客攻击等等。 数据库的表结构和索引设计取消可能带来软件上的架构缺陷和性能风险,工程结构混乱导致后续维护艰难;...

Joker 1258

码出高效,阿里巴巴JAVA开发手册1.4.0

码出高效,阿里巴巴JAVA开发手册1.4.0阅读笔记 一、编程规约(三) 代码格式// 关键词if与括号之间必须有一个空格,括号内的f与左括号,0与右括号不需要空格 if (flag == 0) { System.out.println(say); } 6. 【强制】注释的双斜线与内容之间有且仅一个空格。 正例: // 这是示例注释,请注意在双斜线之后有一个空格...

weixin_30508241的博客 233

Java 集合(List、Set)与数组(Arr)互转方法及注意事项,难怪《阿里开发手册》会如此重视

通过本篇的学习,你将全面掌握 List,Set 和数组间相互转换的方式,还会规避很多 Arrays 方法常见的坑。

Java Punk 4461

阿里巴巴Java 约规手册:码出高效,码出质量

最近在和实验室的同学一起给学校教务处做一个教学工作量统计系统,在团队一起合作开发及测试的过程中,我认识到了自己在开发规范方面的不足,虽然以前就看过阿里巴巴Java 约规手册,但是我在平时自己做项目、学习的过程中并没有很注意,只遵守驼峰命名等较为基础的约规。在这次的开发过程中,因为开发当中的不规范而导致了很多问题,例如: POJO 类及方法返回值的类型都定义的是 int 等基本类型,而不是 Int...

wangbo818的博客 539

Java基础06-Java数组详解:如何高效处理数据集合

数组(Array)是一种用于存储相同类型数据的线性数据结构。数组中的每个元素都具有一个唯一的索引(Index),通过索引可以快速访问或修改数组中的元素。数组的大小(即元素的数量)在声明时确定,并且在程序运行期间不能改变。Java 中的数组是对象,存储在堆内存中,而数组变量则是对数组对象的引用。数组可以存储基本数据类型(如intdoublechar等)或对象引用(如String、自定义类等)。如果需要对对象数组进行排序,可以使用的重载方法,并提供一个Comparator来定义排序规则。

千淘万漉虽辛苦,吹尽狂沙始到金 2万+

阿里巴巴 Java 开发手册

【强制】不允许任何魔法值(即未经定义的常量)直接出现在代码中。【强制】long 或者 Long 初始赋值时,必须使用大写的 L,不能是小写的 l,小写容易跟数字 1 混淆,造成误解。写的是数字的 21,还是 Long 型的 2?【推荐】不要使用一个常量类维护所有常量,应该按常量功能进行归类,分开维护。如:缓存相关的常量放在类:CacheConsts 下;系统配置相关的常量放在类:ConfigConsts 下。大而全的常量类,非得使用查找功能才能定位到修改的常量,不利于理解和维护。

qq_43342391的博客 1887

码出高效 Java开发手册一

第 1 章计算机基础 1.1 走进O与1的世界 正数的补码与原码、反码是一样的 ,而负数的补码是反码加 l 的结果。这样使减法运算可以使用加法器实现, 符号位也参与运算。 减少中间变量存储的开销,降低了CPU内部的设计复杂度,使内部结构更加精简,计算更加高效 ,无论对于指令、寄存器,还是运算器都会减轻很大的负担。 在左移&amp;amp;amp;lt;&amp;amp;amp;lt;与右移&amp;amp;amp;gt;&amp;amp;amp;gt;两种 运

月寒日暖的博客 508

《码出高效:java开发手册》六-数据结构与集合(二)

接上篇,第六章第二部分,上篇讲到了红黑树的FixAfterInsertion方法,这个方法原理与fixAfterDelete类似,只讲这个添加时的调整方法代码可以看到,调整后的根节点一定是黑色的,叶子节点可红可黑,叶子下挂的虚节点一定是黑色,体现了红黑树的性质左旋和右旋的代码如下,这里只有左旋,右旋类似下图为color of 方法代码下图为以一个treemap为例演示平衡策略这里去除57,插入59会触发右旋和左旋。

qq_39167720的博客 889
上一篇: Java8新特性:接口的静态方法和默认方法
下一篇: 设计模式(简单工厂、工厂模式和抽象工厂)
Introncheng
博客等级 码龄9年 9粉丝 37原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值