操纵java数组[转]

原创 2005年04月24日 10:45:00

如果你做过很多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这样的集合类型在它内部有某种存储类型去存储集合元素。在这个例子中,使用的存储类型是作为参数传

JAVA 数组转字符串,用符号分割

String[] ary = {"abc", "123", "45"}; 方法一: 需要引入Apache Commons组件中的个commons-lang.jar包:  String str...
  • CH674605461
  • CH674605461
  • 2016年01月26日 14:05
  • 14001

将String转换成Int数组-Java

今天贴出来一个编程小技巧,利用substring或charAt将字符转换为int数组。 方法一: public class ParseString { public static int[] s...
  • guomutian911
  • guomutian911
  • 2015年10月01日 17:56
  • 11813

操纵java数组[珍藏]

该文具备收藏价值,正好给初学者用。转自:http://www.javaresearch.org/article/showarticle.jsp?column=1&thread=2994如果你做过很多j...
  • wobluesky
  • wobluesky
  • 2005年02月22日 14:33
  • 471

java中JSON将数组对象转换成JSON字符串输出实例

java中JSON将对象转换成JSON字符串输出实例
  • qq_24877569
  • qq_24877569
  • 2016年05月14日 21:45
  • 18419

Java数组转字符串

数组直接用 toString()方法返回
  • ilmlj
  • ilmlj
  • 2014年05月02日 19:22
  • 2537

Java 字符串与数值、数组之间的转化

一、Java 字符串转化为数值,数值转化为字符串 字符转化为数值 int intValue = Integer.parseInt(intString); double doubleVa...
  • Agly_Clarlie
  • Agly_Clarlie
  • 2016年01月06日 19:47
  • 2304

操纵java数组

google_ad_client = "pub-8800625213955058";/* 336x280, 创建于 07-11-21 */google_ad_slot = "0989131976";...
  • java169
  • java169
  • 2008年05月23日 23:55
  • 125

Java中字符串与数组,数组与list之间的转化,及字符串处理

Java中字符串与数组,数组与list之间的转化,及使用StringBuild类型处理字符串的方法实现与讲解,包含实例。...
  • u014800380
  • u014800380
  • 2016年11月01日 14:44
  • 10722

操纵java数组

如果你做过很多java程序,你可能对java集合类很熟悉,例如:Vector和ArrayList。你可以创建一个集合并向其中增加元素:    List lst = new ArrayList();  ...
  • chensheng913
  • chensheng913
  • 2004年12月19日 18:34
  • 6078

java基础将一个int数组转换成一个字符串

将一个int 数组转换成字符串 并输出在控制台上 //将一个int 数组转换成一个字符串 public class IntToStringDemo { public static ...
  • zl18603543572
  • zl18603543572
  • 2015年06月18日 15:59
  • 5489
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:操纵java数组[转]
举报原因:
原因补充:

(最多只允许输入30个字)