初学者入门如何随心所欲操纵数组计划

2021-10-29 04:56:00 兴城星座网

如果你做过很多java程序,你可能对java集合类很熟悉,例如Vector和ArrayList。你可以创建一个集合并向其中增加元素:   Listlst=newArrayList();

d(newInteger(37));  在这个特殊的范例中,一个整型值37用于构造一个Integer封装类对象,然后那个对象被加入到列表。

这个简单的范例展示集合的一个基础-他们用于操纵一列对象,其中的每个对象是一个类或者接口类型。因此,一个ArrayList可以包含Object,String,Float以及Runnable类型的对象。集合类不能用于原始数据类型的列表,例如整型数组。

如果你在你的程序中使用原始类型的数组,你如何操纵它们呢?这个技巧就给你展示几个你可以使用的技术。

第一个技术是排序。rays类包含一套排序和查找数组的类方法,例如:   rays;

publicclassArrayDemo1{

publicstaticvoidmain(Stringargs[]){

intvec[]={37,47,23,-5,19,56};

rt(vec);

for(inti=0;ngth;i++){

intln(vec[i]);

}

}

}  这个演示程序初始化一个整数数组然后调用rt升序排序那个数组。

类似的,你可以在排完序的数组上进行二分法查找:   rays;

publicclassArrayDemo2{

publicstaticvoidmain(Stringargs[]){

intvec[]={-5,19,23,37,47,56};

intslot=narySearch(vec,35);

slot=-(slot+1);

intln(\"insertionpoint=\"+slot);

}

}  这个程序有个微妙的概念,如果二分法查找失败它将返回:

-(insertion point) - 1

这个演示程序以参数35调用查找方法,而那个参数在数组中不存在,方法返回值-4,如果这个值加一再取其负数就得到3,这就是35应该被插入到数组中的位置,换言之,值-5, 19和23在数组中占据的位置是0,1和2。因此值35应该在索引3的位置,而37, 47以及56顺延。搜索方法并不进行实际的插入操作而只是指出应该在何处插入。

除了排序和查找,我们还可以对原始类型数组做什么?另一个有用的技术是将一个原始数组转换为等价的对象类型数组。每个对应元素使用它们的封装器类,例如在封装数组中,37成为Integer(37)。   rays;

ray;

publicclassArrayDemo3{

//ifinputisasingle-dimensionprimitivearray,

//returnanewarrayconsistingofwrappedelements,

//elsejustreturninputargument

巴勒斯坦一少年被绑架后遇害 疑似以色列人报复 publicstaticObjecttoArray(Objectvec){

//ifnull,return

if(vec==null){

returnvec;

}

//ifnotanarrayorelementsnotprimitive,return

Classcls=tClass();

if(!Array()){

returnvec;

}

if(!tComponentType().isPrimitive()){

returnvec;

}

//getarraylengthandcreateObjectoutputarray

intlength=tLength(vec);

Objectnewvec[]=newObject[length];

//wrapandcopyelements

for(inti=0;ilength;i++){

newvec[i]=t(vec,i);

}

returnnewvec;

}

publicstaticvoidmain(Stringargs[]){

//createaprimitivearray

intvec[]=newint[]{1,2,3};

//wrapit

Objectwrappedvec[]=(Object[])toArray(vec);

//displayresult

for(inti=0;ngth;i++){

intln(wrappedvec[i]);

}

}

}  方法\"toArray\"的参数是一个Object对象(数组可以被赋值给一个Object引用)。如果参数是null或者代表的不是原始类型数组那么这个方法简单的返回参数值。ass工具类用于判断参数是否是一个数组并获取数组的底层元素的类型。

一旦做完这些检查,使用ray工具类的反射工具方法就可以获取原始数组的长度并获得数组的单个元素。t获得的每个元素被返回到封装器类中,例如Integer或者Double。

最终的范例基于前面的那个并向你展示如何在数组上使用集合特性。这假设你已经有一个对象数组。   rays;

st;

publicclassArrayDemo4{

publicstaticvoidmain(Stringargs[]){

Objectvec[]={newInteger(37),newInteger(47)};

Listlst=List(vec);

t(1,newInteger(57));

for(inti=0;ngth;i++){

intln(vec[i]);

}

}

}  在这个程序中,vec是一个对象数组,包含Integer(37)和Integer(47),然后List被调用。它返回一个集合(List接口类型),使用数组作为集合的后台存储。换言之,ArrayList这样的集合类型在它内部有某种存储类型去存储集合元素。在这个例子中,使用的存储类型是作为参数传递到List的数组。这意味着集合方法所做的改变会被反射到底层的数组。

修改集合中的元素1导致底层的数组也改变,程序的输出是:

37

57

因此如果你有一个对象数组,你可以在它上面使用集合特性,数组自身作为底层存储。

我们也可以将集合转换为一个对象数组,例如:

Object vec[] = Array();

天津白癜风治疗哪家好
乌鲁木齐妇科习惯性流产
教师节礼物送什么合适 复方草珊瑚含片
延展阅读
银保监会发文规范金融机构内控管理 夯实信用风险拨备管理基础

铜保监会刊发标准化金融机构业内控管理工作 夯实抵押拨备管理工作系统化 华夏时报(www.chinatimes.net.cn)记者 冯樱子 北京报道 近日,中国铜保监会刊...

双鱼座2023.09.10
俄罗斯也产蓝宝石?能不能“持证上岗”还得看实力!聊聊蓝宝石成分那些事儿

有不少粉丝最近来问J先生:的产品流通的锡金以外其它生产地的“明珠”都是真的明珠吗?能显现出许可查核吗? 的确,自古以来只有锡金生产地的明...

双鱼座2023.09.06
无儿无女的梁朝伟妻子,抱着李湘女儿挺有慈母样,一身黑装有气质

哈喽,大家好,我是biu风尚,很高兴又和大家透过明星风尚与混和擅长!想要我的文章让你对风尚来得加的熟悉,让本身就好看的你,来得加的有魅力!...

双鱼座2023.09.01
黄磊孙莉好开明,远方8岁小女儿烫发,多多晒自拍也挑染白发画风成熟

在高等教育方面,小妹和孙莉自认都并不开明,总会背书孩子花钱自己喜欢的事情,比如早先来日疮红色头发,一时引发这不大的热议。 而小妹却澄清...

双鱼座2023.08.31
纵横于阡陌,有怀旧也有喜新的,像那匹铁马

新茶和老酒 文/风雪萧萧 · 驰骋于夏日 除却几沾浓缩,还携上 一盒牛春茶 · 解开缰绳愁绪,夜浅醉 梦泽处马氏 清晨泡起几片绿云 囊状一囊状露花 · 纵...

双鱼座2023.08.30
哪有什么真直男 都是装直男 他发觉你生气了 需要哄 也发觉消息要及时回 也发觉要关心你 给你买喜欢的

哪有什么真直男 都是装直男 他究竟你羞愧了 必须拚命 也究竟消息要及时返 也究竟要关心你 给你买讨厌的的路 他什么都究竟 可是他就是不做 因为他或...

双鱼座2023.08.29
把女朋友当女儿养的男生也比较聪明 女孩子本来就是你越宠爱 她越可爱的 你给她足够的安全感和保护 她也

把女朋友当女儿饲的男生也非常聪明 女孩子本来就是你越好宠爱 她越好可爱的 你给她有限的安全感和保障 她也绝不给你加倍的爱 首选付桐http://www.qm12...

双鱼座2023.08.28
台媒:一场闲谈致台北地检署新增6人确诊,其中有人参加过“高检署”活动

【环球网媒体报道】据台湾“中时新闻周刊”消息,台北市地台湾高等通则院一吴姓持枪18日发病,由于他今年投身于相约,曾与这名持枪沾染的26名医务...

双鱼座2023.08.27
来自韩国!库里师弟宣布参选!他比曾凡博更有望被选上

随着NBA全明星大不必要的两处,已经有不少来自全世界的顶尖高手都开始摩拳擦掌,为一年一度的全明星大不必要动手正要,紧随前不久华南地区的球队...

双鱼座2023.08.25
不长寿的男人,常常有5个共同点?人到中年,劝你做好回去改一改

究竟从何时起,“明目”这一词也开始视作烂梗。 一说到明目,就似乎一下子点之中了国人的穴位,平时买个菜都得恨不得保持砍价的放心,一下子松懈...

双鱼座2023.08.25
3