操纵java数组
如果你做过很多java程序,你可能对java集合类很熟悉,例如Vector和ArrayList。你可以创建一个集合并向其中增加元素: 摘自:http://www.javaresearch.org/article/showarticle.jsp?column=1&thread=2994
List lst = new
ArrayList();
lst.add(new
Integer(37));
在这个特殊的范例中,一个整型值37用于构造一个Integer封装类对象,然后那个对象被加入到列表。
这个简单的范例展示集合的一个基础-他们用于操纵一列对象,其中的每个对象是一个类或者接口类型。因此,一个ArrayList可以包含Object,String,Float以及Runnable类型的对象。集合类不能用于原始数据类型的列表,例如整型数组。
如果你在你的程序中使用原始类型的数组,你如何操纵它们呢?这个技巧就给你展示几个你可以使用的技术。
第一个技术是排序。java.util.Arrays类包含一套排序和查找数组的类方法,例如:
import
java.util.Arrays;
public
class
ArrayDemo1 {
public
static
void
main(String args[]) {
int
vec[] = {37, 47, 23, -5, 19, 56};
Arrays.sort(vec);
for
(int
i = 0; i < vec.length; i++) {
System.out.println(vec[i]);
}
}
}
这个演示程序初始化一个整数数组然后调用Arrays.sort升序排序那个数组。
类似的,你可以在排完序的数组上进行二分法查找:
import
java.util.Arrays;
public
class
ArrayDemo2 {
public
static
void
main(String args[]) {
int
vec[] = {-5, 19, 23, 37, 47, 56};
int
slot = Arrays.binarySearch(vec, 35);
slot = -(slot + 1);
System.out.println("insertion point = "
+ slot);
}
}
这个程序有个微妙的概念,如果二分法查找失败它将返回:
-(insertion point) - 1
这
个演示程序以参数35调用查找方法,而那个参数在数组中不存在,方法返回值-4,如果这个值加一再取其负数就得到3,这就是35应该被插入到数组中的位
置,换言之,值-5, 19和23在数组中占据的位置是0,1和2。因此值35应该在索引3的位置,而37,
47以及56顺延。搜索方法并不进行实际的插入操作而只是指出应该在何处插入。
除了排序和查找,我们还可以对原始类型数组做什么?另一个有用的技术是将一个原始数组转换为等价的对象类型数组。每个对应元素使用它们的封装器类,例如在封装数组中,37成为Integer(37)。
import
java.util.Arrays;
import
java.lang.reflect.Array;
public
class
ArrayDemo3 {
// if input is a single-dimension primitive array,
// return a new array consisting of wrapped elements,
// else just return input argument
public
static
Object toArray(Object vec) {
// if null, return
if
(vec == null) {
return
vec;
}
// if not an array or elements not primitive, return
Class cls = vec.getClass();
if
(!cls.isArray()) {
return
vec;
}
if
(!cls.getComponentType().isPrimitive()) {
return
vec;
}
// get array length and create Object output array
int
length = Array.getLength(vec);
Object new
vec[] = new
Object[length];
// wrap and copy elements
for
(int
i = 0; i < length; i++) {
newvec[i] = Array.get(vec, i);
}
return
newvec;
}
public
static
void
main(String args[]) {
// create a primitive array
int
vec[] = new
int
[]{1, 2, 3};
// wrap it
Object wrappedvec[] = (Object[])toArray(vec);
// display result
for
(int
i = 0; i < wrappedvec.length; i++) {
System.out.println(wrappedvec[i]);
}
}
}
方法"toArray"的参数是一个Object对象(数组可以被赋值给一个Object引用)。如果参数是null或者代表的不是原始类型数组那么这个方法简单的返回参数值。java.lang.Class工具类用于判断参数是否是一个数组并获取数组的底层元素的类型。
一旦做完这些检查,使用java.lang.reflect.Array工具类的反射工具方法就可以获取原始数组的长度并获得数组的单个元素。Array.get获得的每个元素被返回到封装器类中,例如Integer或者Double。
最终的范例基于前面的那个并向你展示如何在数组上使用集合特性。这假设你已经有一个对象数组。
import
java.util.Arrays;
import
java.util.List;
public
class
ArrayDemo4 {
public
static
void
main(String args[]) {
Object vec[] = {new
Integer(37), new
Integer(47)};
List lst = Arrays.asList(vec);
lst.set(1, new
Integer(57));
for
(int
i = 0; i < vec.length; i++) {
System.out.println(vec[i]);
}
}
}
在这个程序中,vec是一个对象数组,包含Integer(37)和Integer(47),然后
Arrays.asList被调用。它返回一个集合(List接口类型),使用数组作为集合的后台存储。换言之,ArrayList这样的集合类型在它内
部有某种存储类型去存储集合元素。在这个例子中,使用的存储类型是作为参数传递到Arrays.asList的数组。这意味着集合方法所做的改变会被反射
到底层的数组。
修改集合中的元素1导致底层的数组也改变,程序的输出是:
37
57
因此如果你有一个对象数组,你可以在它上面使用集合特性,数组自身作为底层存储。
我们也可以将集合转换为一个对象数组,例如:
Object vec[] = lst.toArray();
相关推荐
JAV.zip_jaV.H0D_jav.com_jav513_javjobvideo日韩_vjav
yrtos_ MULTITASKING RTOS,.
反射、xml解析
反射: 反射就读取class文件,获取该文件中的属性、方法等, 作用:用来获取指定路径下的class文件中所具备的的所有属性和方法。 //返回Class对象的方式之一:getClass(); //每一个引用数据类型都有一个getClass的方法,返回的是该类的Class对象 public static void reflex() { User user = new User(); Class cls = user.getClass(); Class cls2 = user.getClass()
AI自动打游戏全攻略:从环境搭建到Agent训练实战
本文系统介绍了AI自动打游戏的技术实现方案,重点解析了强化学习(DQN算法)在贪吃蛇游戏中的应用。文章从技术选型入手,对比了强化学习与计算机视觉两种方案,详细说明了开发环境配置步骤,并深入讲解了DQN模型构建、游戏环境封装、训练优化等核心环节。通过经验回放和目标网络等技术,有效提升了AI的学习效率和稳定性。该方案具有通用性,只需调整参数即可应用于其他简单游戏场景,为开发者实现游戏AI提供了完整的技术路径。
欢迎光临 Javen-Studio 新网址:http://javenstudio.org
欢迎光临 Javen-Studio 新网址:http://javenstudio.org
163种中草药图像数据集构建与ResNet-50迁移学习实战指南
在计算机视觉领域,高质量标注数据集是模型训练的基石,直接影响图像分类、目标检测等任务的性能。其核心原理在于为算法提供结构化的监督信号,通过深度学习模型学习从像素到语义的映射关系。构建此类数据集的技术价值在于解决了特定垂直领域(如中医药)数据稀缺的痛点,为AI技术落地提供了关键“燃料”。在应用场景上,标准化数据集广泛支撑着教学演示、算法验证和产业应用开发。本文聚焦于中草药识别这一细分领域,详细介绍了一个包含163种常见药材、经过多源聚合与清洗的图像数据集构建全过程,并提供了基于PyTorch和ResNet-5
GD-Link离线烧录全攻略:从配置到一键下载的保姆级教程
本文详细介绍了GD-Link离线烧录的全流程,从硬件准备到软件配置,再到一键下载的实战技巧。通过保姆级教程,帮助工程师快速掌握国产MCU的离线烧录技术,适用于产线批量烧录和现场设备维护等场景,显著提升工作效率。
java byte数组 偏移_实例解析Java byte数组操纵方式代码
实例解析Java byte数组操纵方式代码字节数组的关键在于它为存储在该部分内存中的每个8位值提供索引(快速),精确的原始访问,并且您可以对这些字节进行操作以控制每个位。 坏处是计算机只将每个条目视为一个独立的8位数 - 这可能是你的程序正在处理的,或者你可能更喜欢一些强大的数据类型,如跟踪自己的长度和增长的字符串 根据需要,或者一个浮点数,让你存储说3.14而不考虑按位表示。 作为数据类型,在长...
深入解析EXI协议在ISO15118-2命令测试中的编解码实践
本文深入探讨了EXI协议在ISO15118-2车桩通信标准中的关键作用与实践方法。EXI编解码测试是确保通信准确性与效率的核心环节,文章详细介绍了从搭建测试环境、选择工具库到编写完整测试代码的全过程,并分析了结果差异的常见原因与调试技巧,为电动汽车充电系统的开发者提供了实用的技术指南。
操纵java数组[转]
如果你做过很多java程序,你可能对java集合类很熟悉,例如Vector和ArrayList。你可以创建一个集合并向其中增加元素: List lst = new ArrayList(); lst.add(new Integer(37));在这个特殊的范例中,一个整型值37用于构造一个Integer封装类对象,然后那个对象被加入到列表。这个简单的范例展示集合的一个基础-他们用于操纵一列
Ansys Lumerical 启动时出现 Error: Could not connect to Ansys license server specified at 1055@ 的另一种解决办法
昨天在关闭了中之后 就能正常打开 FDTD 了,结果今天想开启出现了同样的报错:我猜测昨天能启动的原因在于关闭之后要重启电脑,并且在重启之后我第一时间打开 lumerical 测试因此端口没有被占用,今天是在电脑启动之后一段时间才打开所以又遇到了端口占用的问题。
基于大模型最大化电力交易收益(策略与代码实践)
新一代电力交易系统正借助大型语言模型(LLM)实现智能化转型。面对可再生能源占比提升带来的市场波动性加剧,传统交易策略已难以应对。LLM通过多模态能力,能够实时处理海量异构数据,包括政策公告、设备检修信息、天气报告等非结构化数据,构建更精准的电力市场预测模型。智能交易系统主要包含三大核心模块:市场情报感知与理解器、融合LLM的短期电价预测模型和自适应交易策略生成器。这些模块协同工作,可在几分钟内完成事件分析、价格预测和策略生成,显著提升交易效率。系统还能实现跨市场套利和动态风险管理,但需注意数据质量、模型验
操纵java数组[珍藏]
该文具备收藏价值,正好给初学者用。转自:http://www.javaresearch.org/article/showarticle.jsp?column=1&thread=2994如果你做过很多java程序,你可能对java集合类很熟悉,例如Vector和ArrayList。你可以创建一个集合并向其中增加元素: List lst = new ArrayList()
UFSV3.1-RPMB实现与测试
UFS RPMB功能验证与测试指南 本文介绍了UFS(通用闪存存储)中RPMB(重放保护内存块)的功能验证与测试方法。主要内容包括: RPMB基础配置: 在Linux系统中查看RPMB设备节点 读取RPMB单元描述符获取配置信息 配置RPMB区域大小(16MB)和使能状态 RPMB特性验证: 获取单次写最大请求(16KB) 测试未编程认证密钥时的读写操作 验证认证密钥编程过程 测试用例: 包含4个测试用例,验证RPMB在不同状态下的行为 提供了详细的命令行操作和预期结果 本文可作为UFS RPMB功能验证。
初学者入门:如何随心所欲操纵java数组
如果你做过很多java程序,你可能对java集合类很熟悉,例如Vector和ArrayList。你可以创建一个集合并向其中增加元素: List lst = new ArrayList(); lst.add(new Integer(37)); 在这个特殊的范例中,一个整型值37用于
某城商银行生产容器云平台详细设计方案分享及经验总结
AS3模式的CIS容器部署在K8S集群内,作为F5的控制器,CIS容器通过对K8S集群内Configmap资源进行监控,将Configmap资源中的内容转化为F5的配置,将配置推送给 F5 ,CIS容器还通过K8S标准的API接口完成业务发现和实时监听集群内Pod的变化,一旦Pod发生变化,相应的更新会及时推送给F5,并完成更新。容器技术发展非常迅速,现在应用大多以容器作为承载介质,前两年在容器云上承载的应用类型主要是Web类,随着容器云领域的不断发展,越来越多的应用类型将迁移至容器云,包括有状态应用。
STM32F407中文手册
STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。
操纵Java数组
如果你做过很多java程序,你可能对java集合类很熟悉,例如Vector和ArrayList。你可以创建一个集合并向其中增加元素: List lst = new ArrayList(); lst.add(new Integer(37)); 在这个特殊的范例中,一个整型值37用于构造一个Integer封装类对象,然后那个对象被加入到列表。这个简单的范例展示集合的一
Statistics and Machine Learning Toolbox
Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具
Java官方操纵byte数组的方式
java官方提供了一种操作字节数组的方法——内存流(字节数组流)ByteArrayInputStream、ByteArrayOutputStream ByteArrayOutputStream——byte数组合并 /** * 将所有的字节数组全部写入内存中,之后将其转化为字节数组 */ public static void main(String[]...
Outlook Express 6 (OE6) for Win7/Win8/Win10
英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。
591



被折叠的 条评论
为什么被折叠?



