新客网WWW.XKER.COM:致力做中国最专业的网络学院!
学院: 操作系统 - 网络应用 - 服务器 - 网络安全 - 工具软件 - 办公软件 - Web开发 - 数据库 - 网页设计 - 图形图像 - 媒体动画 - 硬件学堂 - 存储频道 - QQ专区
您的位置:首页 > 软件开发 > JAVA > 正文:操纵java数组

操纵java数组

新客网 XKER.COM 2006-06-08 来源: 收藏本文

如果你做过很多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工具类用于判断参数是否是一个数组并获取数组的底层元素的类型。

共2页: 上一页 [1] [2] 下一页
收藏】 【评论】 【推荐】 【投稿】 【打印】 【关闭
发表评论
要记得去论坛讨论,点击注册新会员匿名评论
评论内容:不能超过250字,需审核后才会公布,请自觉遵守互联网相关政策法规。
阅读排行
随机推荐
实用信息推荐