java中List.subList方法使用注意

车载以太网测试-1【TC8物理层测试基础】 车载以太网物理层是车载网络的基础,负责将数字数据转换为适合在物理介质上传输的信号,并确保数据传输的可靠性、稳定性和高效性。它在车载网络系统中扮演着至关重要的角色,直接影响着车辆内部通信的性能和效率。1. 主要物理层标准车载以太网标准由IEEE 802.3和标准名称速率线缆类型编码方式应用场景100BASE-T1100 Mbps单对非屏蔽双绞线车载摄像头、传感器1 Gbps单对屏蔽/非屏蔽双绞线自动驾驶域控制器、高清视频10BASE-T1S10 Mbps单对双绞线幅移键控(ASK) 阅读详情

本文转自:http://topic.youkuaiyun.com/u/20110830/13/7ea0e09c-7317-4215-96ab-fa672ea91ff8.html?91324


For example, ArrayList<Integer> aList;

获取其子链表 List<Integer> sub = aList.subList(begin, end);

sub可以继续转换成ArrayList, ArrayList<Integer> aSub = new ArrayList<Integer>(sub);

如果你使用 ArrayList<Integer> aSubList = (ArrayList<Integer>)aList.subList(begin, end);

会产生异常,因为List转换成ArrayList 是不允许的 (父类转换成子类是不允许的,因为会有数据丢失)

 

 

说明:我写此的目的不是为了抨击jdk的不好,而是为了说明这个地方可能人为引发误解。
在使用集合中,可能常常需要取集合中的某一部分子集来进行一下操作,于是subList这个方法就映入我们的眼帘,毫不犹豫地使用。

例如以下代码:

Java code
public  static  void  main( final  String[] args) { List < Object >  lists  =  new  ArrayList < Object > (); lists.add( " 1 " ); lists.add( " 2 " ); lists.add( " 3 " ); lists.add( " 4 " ); List < Object >  tempList  = lists.subList( 2 , lists.size()); tempList.add( " 6 " ); System.out.println(tempList);  //  1 System.out.println(lists);  //  2  }
 

代码初步写好后,可能我们想达到的效果是:往集合lists的子集合tempList中添加一个元素6,而原有的集合保持不变。

即到达这样的效果:lists = [1, 2, 3, 4],tempList = [3, 4, 6]。但是我们看到实际的结果确是lists里边也添加了元素6。

这是怎么一会事呢,通过查找java原代码我们可以看到:tempList的subList实现代码在AbstractList类里边,然而无论如何,最终的结果都是返回一个AbstractList的子类:SubList(该类是一个使用默认修饰符修饰的类,其源代码位于AbstractList.java类文件里边),

SubList类的构造方法:

Java code
SubList(AbstractList < E >  list,  int  fromIndex,  int  toIndex) {  if  (fromIndex  <  0 )  throw  new IndexOutOfBoundsException( " fromIndex =  "  +  fromIndex);  if  (toIndex  >  list.size())  throw  new IndexOutOfBoundsException( " toIndex =  "  +  toIndex);  if  (fromIndex  >  toIndex)  throw  new IllegalArgumentException( " fromIndex( "  +  fromIndex  +  " ) > toIndex( "  +  toIndex  +  " ) " ); l  =  list; offset  =  fromIndex; size  =  toIndex  -  fromIndex; expectedModCount  =  l.modCount; }

 

  因此,当我们使用子集合tempList进行元素的修改操作时,会影响原有的list集合。所以在使用subList方法时,一定要想清楚,是否需要对子集合进行修改元素而不影响原有的list集合。

如果需要对子集合的元素进行修改操作而不需要影响原集合时,我们可以使用以下方法进行处理:
Java code
public  static  void  main( final  String[] args) { List < Object >  lists  =  new  ArrayList < Object > (); lists.add( " 1 " ); lists.add( " 2 " ); lists.add( " 3 " ); lists.add( " 4 " );  // 注意这里是和本文顶部的代码不同的....  List < Object >  tempList  =  new  ArrayList < Object > (lists.subList( 2 , lists.size())); tempList.add( " 6 " ); System.out.println(tempList);  //  1  System.out.println(lists);  //  2  }
Vivado报错-4 [Routed 35-3424] SLL Assignment failed ILP VU19P Vivado报错[Routed 35-3424] SLL Assignment failed ILP VU19P 阅读详情

相关推荐

BEVFormer vs BEVFusion:5个关键差异点帮你选对环视感知方案

本文深入对比了自动驾驶领域两大主流环视感知方案BEVFormer与BEVFusion。BEVFormer作为纯视觉BEV感知的标杆,通过注意力机制隐式学习深度,成本较低;而BEVFusion作为多模态融合典范,融合激光雷达与摄像头数据,在性能、小目标检测及极端环境鲁棒性上优势显著。文章从计算效率、部署成本、数据依赖性等五个核心维度提供选型指南,帮助技术决策者根据自身算力预算与传感器配置做出明智选择。

weixin_29306011的博客 124

ArrayList之SubList源码解析

subList是ArrayList的内部类, public List<E> subList(int fromIndex, int toIndex) { subListRangeCheck(fromIndex, toIndex, size); return new SubList(this, 0, fromIndex, toIndex); } subListRang...

root 975

ThingsBoard入门实战(二):ThingsBoard 设备接入

文章目录ThingsBoard 设备接入一、设备配置/设备类型二、设备三、设备接入HTTPCOAPMQTT四、下一步 ThingsBoard 设备接入 设备接入并不一定需要真正的设备,我们可以通过程序。或者命令来模拟设备,向平台发送信息。 这节我们先为用户分配一个设备,然后通过模拟设备命令更新设备的状态(遥测值)。 一、设备配置/设备类型 添加一个叫"路灯"的设备配置。 设备配置听起来比较抽象,可以认为是设备类型或者是设备类型的配置。实际上,ThingsBoard 中很多时候让选择设备类型,就是选的这个。

AIGC搞起 1万+

Java的List之坑系列--subList与原始List相互影响

本文介绍Java中的List的几个注意问题,包括:List#subList(获取子list)、Collections#unmodifiableList(不可修改的List)。

IT利刃出鞘的博客 5306

用STM32定时器PWM高级功能驱动步进电机:F103C8T6+TB6600实战教程

本文详细介绍了如何利用STM32F103C8T6微控制器的定时器PWM高级功能驱动TB6600步进电机驱动器,实现高效、灵活的运动控制方案。通过硬件配置、PWM参数计算、运动控制算法及TB6600高级功能应用的全面解析,为工业自动化和精密控制领域提供了实用的技术参考。

game4的博客 186

全桥LLC谐振变换器变频控制工作原理与仿真

全桥LLC谐振变换器以其效率高、全范围软开关、器件电应力小等优点,越来越多地应用于大功率场合。电力电子技术的发展日益追求高频化,所带来的问题是半导体开关器件高频运行时的开关损耗急剧增加。各种软开关电路随之出现。可以有效减小开关损耗,使进一步提高开关频率成为可能。谐振式开关因其可在电流自然过零点开通半导体器件,实现零电压开关,特别适合采用MOSFET作开关的装置。最简单的谐振电路有串联谐振(SRC)和并联谐振(PRC)。SRC只能工作于降压状态,应用受限;

晞子的技术札记 3074

C#3.0的新特性

/**============================主要演示C#3.0的新特性=====================*一、自动属性*二、对像和集合初始化器*三、扩展方法*四、Lambda表达式* 13/6/2010 Berlin**/using System;using System.Collections.Generic;using System.Linq;us...

weixin_30552811的博客 192

保姆级教程:在摩尔线程MTT S80上快速部署Ollama运行DeepSeek R1模型(附性能测试)

本文提供了一份详细的保姆级教程,指导用户在摩尔线程MTT S80显卡上部署Ollama并运行DeepSeek R1模型。内容涵盖从驱动安装、Docker环境配置到模型拉取、性能测试的全流程,并分享了实测数据与优化技巧,旨在帮助开发者快速在国产GPU平台上实现高效的大语言模型推理。

weixin_29091837的博客 525

javaAPI深入理解(1)如何截短一个List以及List.subList()方法的坑

removeRange(int, int);这个方法AbstractList并没有暴露出来,我们应该如何得到一个截短的list?1 如何得到一个list某个范围的子集sublist首先想到sublist(int, int)方法 注意此方法参数左闭右开。 测试如下1.1 修改sublist会影响原来的list LinkedList<String> ll = new LinkedList<>(

kkgbn的博客 4万+

【GameFramework框架内置模块】8、文件系统(File System)

最近好忙,鸽了好久。不能颓废了,继续发力。今天分享的是GF框架的文件系统。首先,引用比较官方的说法:GF的FileSystem虚拟文件系统,使用类似磁盘存储的感念对零散的文件进行集中管理,优化资源加载时产生的内存分配,也可以对资源进行局部片段加载,极大的提升了资源加载的性能。通俗点讲就是,我这个模块就是加载磁盘文件的,优化加载时产生的内存分配。那么,它是怎么优化的呢?

优快云博客专家,Unity3D高级软件工程师,《Unity 3D从入门到实战》作者。 2452

ANSYS WORKBENCH——参数化建模以及参数优化(结果导出为Excel)

目录 1、打开软件workbench 2、找到static structure,双击打开 3、选择材料 4、参数化建模 ​ 注:印记面的创建 5、模型属性设置 注:设置优化目标 6、回主界面,选择direct optimization模块 1、打开软件workbench 2、找到static structure,双击打开 3、选择材料 4、参数化建模 至此参数化建模就已经完成啦 注:印记面的创建 印记面一般是一个虚拟的区域,参与实际的网格划分,但是只是由于载.

python_AI_fans的博客 1万+

java之深入理解List.subList()方法

removeRange(int, int);这个方法AbstractList并没有暴露出来,我们应该如何得到一个截短的list? 1 如何得到一个list某个范围的子集sublist 首先想到sublist(int, int)方法  注意此方法参数左闭右开。  测试如下 1.1 修改sublist会影响原来的list LinkedList<String> ll = new Lin...

别抢我蓝buff 1955

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

Java中List的subList()方法及使用注意事项

其中subList(0, 5)取得的是下标为0到4的元素,不包含下标为5的元素.java.util.List中的subList方法返回列表中指定的 fromIndex(包括 )和 toIndex(不包括)之间的部分视图。 fromIndex - subList 的低端(包括) toIndex - subList 的高端(不包括)此方法省去了显式范围操作(此操作通常针对数组存在)。通过传递 subList 视图而非整个列表,期望列表的任何操作可用作范围操作。例如,下面的语句从列表中移除了元素的范围: 下面通过

qq_43842093的博客 3万+

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

Java中的List.subList方法注意事项

ArrayList的subList结果不可强转成ArrayList,否则会抛出ClassCastException 异常,即 java.util.RandomAccessSubList cannot be cast to java.util.ArrayList. 说明:subList 返回的是 ArrayList 的内部类 SubList,并不是 ArrayList ,而是 ArrayList ...

大漠孤烟的博客 3176

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

java int index_java中 List.subList(int fromIndex, int toIndex)方法需要注意的问题

关于集合类,《阿里巴巴Java开发手册》中有一个规定: 这里我们简单分析下。subListsubList是List接口中定义的一个方法,该方法主要用于返回一个集合中的一段、可以理解为截取一个集合中的部分元素,他的返回值也是一个List。如以下代码:public static void main(String[] args) {List names = new ArrayList() {{add(...

weixin_42363154的博客 352

java sublist 用法_java.util.List接口的方法subList()的使用注意事项

JDK中,List接口有一个实例方法List subList(int fromIndex, int toIndex),其作用是返回一个以fromIndex为起始索引(包含),以toIndex为终止索引(不包含)的子列表(List)。但值得注意的是,返回的这个子列表的幕后其实还是原列表;也就是说,修改这个子列表,将导致原列表也发生改变;反之亦然。下面是一段实例代码:Java代码importja...

weixin_36081891的博客 349

java中 List.subList(int fromIndex, int toIndex)方法需要注意的问题

关于集合类,《阿里巴巴Java开发手册》中有一个规定: 这里我们简单分析下。 subList subList是List接口中定义的一个方法,该方法主要用于返回一个集合中的一段、可以理解为截取一个集合中的部分元素,他的返回值也是一个List。 如以下代码: public static void main(String[] args) { List<String> names = new ArrayList<String>() {{ add.

Dream It Possible 3861

java.util.List接口的方法subList()的使用注意事项

JDK中,List接口有一个实例方法List<E> subList(int fromIndex, int toIndex), 其作用是返回一个以fromIndex为起始索引(包含),以toIndex为终止索引(不包含)的子列表(List)。 但值得注意的是,返回的这个子列表的幕后其实还是原列表; 也就是说,修改这个子列表,将导致原列表也发生改变;反之 父的list改变会影响子的li...

那些年的代码 69

import java.util.list报错_java.util.List接口的方法subList()的使用注意事项

JDK中,List接口有一个实例方法List subList(int fromIndex, int toIndex),其作用是返回一个以fromIndex为起始索引(包含),以toIndex为终止索引(不包含)的子列表(List)。但值得注意的是,返回的这个子列表的幕后其实还是原列表;也就是说,修改这个子列表,将导致原列表也发生改变;反之 父的list改变会影响子的list失效,报错public ...

weixin_36132709的博客 901

java.util.List接口的方法subList()的说明及使用注意事项

JDK中,List接口有一个实例方法List&lt;E&gt; subList(int fromIndex, int toIndex),其作用是返回一个以fromIndex为起始索引(包含),以toIndex为终止索引(不包含)的子列表(List)。  一、subList简述    原型:List&lt;E&gt; subList(int fromIndex,int toIndex)      1...

道阻且长,行则将至 4875
上一篇: EasyMock tutorial – Getting Started
下一篇: Java多线程-工具篇-BlockingQueue
louis9212
博客等级 码龄14年 8粉丝 49原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值