龙盟编程博客 | 无障碍搜索 | 云盘搜索神器
快速搜索
主页 > 软件开发 > JAVA开发 >

JAVA数组和JAV集合类的操作

时间:2009-12-23 15:42来源:未知 作者:admin 点击:
分享到:
假如你做过很多Java程序,你可能对java集合类很熟悉,例如:Vector和ArrayList。你可以创建一个集合并向其中增加元素: List lst = new ArrayList(); lst.add(new Integer(37)); 在这个非凡的范例中,一

  假如你做过很多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++) {
  
精彩图集

赞助商链接