选择显示字体大小

操纵java数组

如果你做过很多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(&quot;insertion point = &quot; + 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]);            }        }    }

方法&quot;toarray&quot;的参数是一个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这样的集合类型在它内部有某种存储类型去存储集合元素。在这个例子中,使用的存储类型是作为参数传


 


关键字 本文所属关键字

相关 与本文相关文章

分类 所有文章关键字导航

源码编程相关

Java   Asp   PHP   .Net   XML   C/C++   CGI   VB   Jsp   J2ee   J2se   J2me   EJB   Servlet   Tomcat   Resin   Struts   Weblogic   Eclipse   ANT   GUI   JMS   Web servise   IDEA   Webphere   Hibernate   Spring   Jboss   Applet   Swing   Socket   Javamail   Perl   Ajax   P2P   安全   模式   框架   测试   开源   游戏

SQL数据库相关

My-SQL   Ms-SQL   Access   DB2   Oracle   Sybase   SQLserver   索引   存储过程   加密   数据库   分页   视图  

手机无线相关

3G   Wap   CDMA   GRPS   GSM   IVR   彩信   短信   无线   增值业务

网页设计制作相关

HTML   CSS   网页配色   网页特效   Javascript   VBscript   Dreamweaver   Frontpage   JS   Web   网站设计

网站建设推广相关

建站经验   网站优化   网站排名   推广   Alexa

操作系统/服务器相关

Windows XP   Windows 2000   Windows 2003   Windows Me   Windows 9.x   Linux   UNIX   注册表   操作系统   服务器   应用服务器

图形图像多媒体相关

Photoshop   Fireworks   Flash   Coreldraw   Illustrator   Freehand   Photoimpact   多媒体   图形图像

标准 网站致力的规范

Valid CSS!

无不良内容,无不良广告,无恶意代码

Valid XHTML 1.0 Transitional

creativecommons