初学者入门:如何随心所欲操纵java数组

 

初学者入门:如何随心所欲操纵java数组

开发者在线 Builder.com.cn 更新时间:2008-04-11作者:执木 来源:IT专家网

本文关键词: 初学者 数组 操纵 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[] = ;
  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[] = ;
  int slot = Arrays.binarySearch(vec, 35);
  slot = -(slot + 1);
  System.out.println("insertion point = " + slot);
  }
  }
  这个程序有个微妙的概念,如果二分法查找失败它将返回:

这个演示程序以参数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[];
  // 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[] = ;
  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();

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
当你学习C语言时,数组和指针是两个非常重要的概念。下面是一些关于数组和指针的基础知识: 1. 数组 数组是一组同类型数据的集合。在C语言中,数组的下标从0开始,例如: ``` int array[5]; // 定义一个包含5个整数的数组 array[0] = 10; // 给数组中的第一个元素赋值为10 array[1] = 20; // 给数组中的第二个元素赋值为20 ``` 上面的代码创建了一个包含5个整数的数组,并将第一个元素赋值为10,第二个元素赋值为20。要注意的是,数组的大小是在定义时确定的,并且不能改变。 2. 指针 指针是一种特殊的变量,它包含了一个地址,这个地址指向内存中存储的数据。在C语言中,可以使用“*”来声明一个指针变量,例如: ``` int *ptr; // 声明一个指向整数的指针变量 ``` 要访问指针所指向的数据,需要使用“*”运算符,例如: ``` int x = 10; int *ptr; ptr = &x; // 将指针ptr指向变量x的地址 *ptr = 20; // 将变量x的值修改为20 ``` 上面的代码将指针ptr指向变量x的地址,并将变量x的值修改为20。 3. 数组和指针的关系 数组和指针在C语言中密切相关。数组名可以被看作是指向数组第一个元素的指针,例如: ``` int array[5]; int *ptr = array; // 将指针ptr指向数组的第一个元素 ``` 上面的代码将指针ptr指向数组array的第一个元素。可以通过指针访问数组的元素,例如: ``` int array[5] = {10, 20, 30, 40, 50}; int *ptr = array; printf("%d\n", *ptr); // 输出数组的第一个元素10 ptr++; printf("%d\n", *ptr); // 输出数组的第二个元素20 ``` 上面的代码将指针ptr指向数组array的第一个元素,并输出了数组的第一个和第二个元素。 以上是关于数组和指针的基础知识,希望对你有所帮助。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值