用户名: 密码: 免费注册 忘记密码? 加入收藏 | 设为首页
操纵java数组
学院首页 | 资讯中心 | 服务器软件 | 系统工具 | 系统软件 | 办公软件 | 聊天软件 | 多 媒 体 | 网页制作 | 网站运营 | 平面设计
艺术欣赏 | 数据库软件 | 程序开发 | 网络组建 | 源码下载 | 驱动下载 | 软件下载 | 电脑安全 | IT创业 | IT博客 | IT社区
硬件数码导航 | 硬件频道 | 本本频道 | MP3频道 | 相机频道 | 手机频道 | 显卡频道 | LCD 频道 | 音箱音频 | 行情 | 评测 | 导购
学院专题 软件 - 系统 - 办公 - 聊天 - 多媒体 - 网页制作 - IT创业 - 运营 - 平面 - 设计欣赏 - 数据库 - 程序 - 服务器 - 组网

 当前位置: 首页>>技术频道>>程序>>JAVA教程>>正文

操纵java数组

日期:2006-9-15 4:23:44     来源:JR   编辑:   

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


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 newvec[] = 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();

gigi_miao

  ▼ 下一篇新闻 企业级应用中的Applet和Servlet的通信
  ▲ 上一篇新闻 J2SE:六大代码问题检验你的Java知识        网友发表观点请进入=>



我要纠错】【进入论坛交流】【关闭此页

文章搜索
   
最新文章

 
·千名爱好者参与首届PHP调查
·腾讯称QQ通讯信息密钥加密 不会被
·雅虎反超Google排名搜索第二
·中搜等十余家IT企业因流氓软件被
·盛大前员工克隆网游装备获暴利被
·凤凰网将向迅雷提供娱乐及宽带内
·信产部出手规范 新浪式企业法律架
·雅虎中国称旗下软件早已没有流氓
·中搜停止划词搜索与流氓软件决裂

广告赞助
相关文章 相关教程下载
焦点信息
·腾讯称QQ通讯信息密钥加密 不会被监听
·信产部出手规范 新浪式企业法律架构不得不改
·盛大前员工克隆网游装备获暴利被追刑责
·凤凰网将向迅雷提供娱乐及宽带内容
·雅虎中国称旗下软件早已没有流氓问题
·雅虎反超Google排名搜索第二
网友评论:(评论内容只代表网友观点,与本站立场无关!)
发表评论     Hard168社区推荐帖子
姓 名: *
* 请网友遵纪守法并注意语言文明。
IT人物推荐

王江民
马云
柳传志



关于本站    联络方式    广告服务    意见信箱    加入收藏   设为首页    -
本站部分内容来自网上,如有侵权部分,敬请告知,我们会在24小时内给予处理
版权所有:Hard168.Com,如需转载文章请与我们取得联系
京ICP备05063857号 Designed by Hard168.Com
操纵java数组