07-08
26

数组,Array

数组
每一个数组都有一个属性.length,可以用于获取数组中元素的个数,例如,定义了如下一个数组, int[] in=new int[]{12,3,4},则in.length等于3。
学习到了3个有用的对于数组进行操作的method,一个是在java.lang.system类下的arraycopy方法,其函数原型如下public static void arraycopy(Object src,int srcPos,Object dest, int destPos, int length),各参数的含义从左至右如下,来源数组名,开始拷贝的位置,目的数组名,目的位置,拷贝的长度(元素个数),使用这个方法必须注意数组的越界问题,而且必须捕获该函数抛出的一个IndexOutOfBoundsException异常。另在java.util.Arrays 类下,有Arrays.sort(),和Arrays.binarySearch(数组名,查找元素),前者用于实现数组排序,后者用于在已经实现排序的数组中进行查找,二者都有多个重载。
   对于Arrays.sort()而言,如果要排序的数组中的元素是某个类的对象,则要求该类实现Comparable接口,该接口中仅有一个方法即public int compareTo(Object o),要求在子类中实现这个方法,注意它的返回值是一个int类型。
    以下是我自己写的一个.java程序,包含了以上我讲到的所有知识点,并另重写了toString()方法用于实现类对象的输出,作为一个复习。在jdk1.5下编译运行通过。import java.util.Arrays;
class Student implements Comparable
{
int num;
String name;
Student(int n,String na)
{
  this.num=n;
  this.name=na;
}
public int compareTo(Object o)           //用于实现引用类型比较的compareTo()方法
{
  Student s=(Student)o;
  int flag=(this.num>s.num)?1:(this.num-s.num);
  if(flag==1)
  {
   return flag;
  }
  else
  {
   return this.name.compareTo(s.name);
  }
}
public String toString()        //重写用于打印的toString()方法
{
  return ("num="+this.num+",name="+this.name);
}
}
class TestArray
{
public static void main(String[] args)
{
  int[] in=new int[]{1,2,4,3};
  Arrays.sort(in); //排序,在包java.util中
  for(int i=0;i<in.length;i++)        //数组的.length属性用于返回数组元素的个数
  {
   System.out.println(in[i]);
  }
  int[] in1=new int[4];
  try
  {  
     System.arraycopy(in,0,in1,0,in.length);        //数组拷贝
  }
  catch(Exception e)
  {
   System.out.println(e.toString());
  }
  for(int i=0;i<in1.length;i++)
  {
   System.out.println(in1[i]);
  }
  int index=Arrays.binarySearch(in,3);    //在已经排序好的数组中查找,在包java.until中
  System.out.println("index="+index);
  Student[] st=new Student[]{new Student(3,"li"),new Student(3,"wang"),new Student(2,"y")};
  Student[] st1=new Student[3];
  Arrays.sort(st);
  for(int j=0;j<st.length;j++)
  {
     System.out.println(st[j]);
  }
    int index1=Arrays.binarySearch(st,new Student(3,"li"));
    System.out.println("index1="+index1);
    try
    {
     System.arraycopy(st,0,st1,0,st.length);
    }
    catch(IndexOutOfBoundsException e)
    {
     e.printStackTrace();
    }
    for(int j=0;j<st1.length;j++)
  {
     System.out.println(st1[j]);
  }
}
}

文章来自: 本站原创
引用通告: 查看所有引用 | 我要引用此文章
Tags:
相关日志:
评论: 0 | 引用: 0 | 查看次数: 542
发表评论
昵 称:
密 码: 游客发言不需要密码.
内 容:
验证码: 验证码
选 项:
虽然发表评论不用注册,但是为了保护您的发言权,建议您注册帐号.
字数限制 1000 字 | UBB代码 开启 | [img]标签 关闭